#take averages

cost10.B0.avg <- trait.avg(s1.new.B0.cost10[[1]])
cost10.B.1.avg <- trait.avg(s1.new.B.1.cost10[[1]])
cost10.B.2.avg <- trait.avg(s1.new.B.2.cost10[[1]])
cost10.B.3.avg <- trait.avg(s1.new.B.3.cost10[[1]])
cost10.B.4.avg <- trait.avg(s1.new.B.4.cost10[[1]])
cost10.B.5.avg <- trait.avg(s1.new.B.5.cost10[[1]])
cost10.B.6.avg <- trait.avg(s1.new.B.6.cost10[[1]])
cost10.B.7.avg <- trait.avg(s1.new.B.7.cost10[[1]])
cost10.B.8.avg <- trait.avg(s1.new.B.8.cost10[[1]])
cost10.B.9.avg <- trait.avg(s1.new.B.9.cost10[[1]])
cost10.B1.avg <- trait.avg(s1.new.B1.cost10[[1]])
#group 

cost10.averages <- rbind(cost10.B0.avg, cost10.B.1.avg, cost10.B.2.avg, cost10.B.3.avg, cost10.B.4.avg, cost10.B.5.avg, cost10.B.6.avg, cost10.B.7.avg, cost10.B.8.avg, cost10.B.9.avg, cost10.B1.avg)
cost10.averages$B <- NA
cost10.averages$B <- rep(seq(0,1,0.1), each=2000)
library(ggplot2)
ggplot(data=subset(cost10.averages, generation==200), aes(x=B,y=Freq, color=Var2))+
geom_line()+
scale_color_manual(values=unique(cost10.averages$Var2))+labs(y="frequency")+theme_bw()+theme(legend.position="none")

cost10.B.drift.outcomes <- rbind(drift5000[[2]], s1.new.B0.cost10[[2]], s1.new.B.1.cost10[[2]], s1.new.B.2.cost10[[2]], s1.new.B.3.cost10[[2]], s1.new.B.4.cost10[[2]], s1.new.B.5.cost10[[2]], s1.new.B.6.cost10[[2]], s1.new.B.7.cost10[[2]], s1.new.B.8.cost10[[2]], s1.new.B.9.cost10[[2]], s1.new.B1.cost10[[2]])
cost10.B.drift.outcomes$B <- NA
cost10.B.drift.outcomes$B[1:5000] <- "drift"
cost10.B.drift.outcomes$B[5001:10500] <- rep(seq(0,1,0.1), each=500)
cost10.B.drift.outcomes$B <- factor(cost10.B.drift.outcomes$B, levels=c("drift","0","0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9","1"))
library(colorRamps)
cost10.B.drift.outcomes$green.outcome <- NA
cost10.B.drift.outcomes$green.outcome[cost10.B.drift.outcomes$e.var %in% blue2green(10)[1:5]] <- FALSE
cost10.B.drift.outcomes$green.outcome[cost10.B.drift.outcomes$e.var %in% blue2green(10)[6:10]] <- TRUE
library(sjPlot)
cost10.model <- glm(green.outcome~B, data=cost10.B.drift.outcomes, family="binomial")
summary(cost10.model)

Call:
glm(formula = green.outcome ~ B, family = "binomial", data = cost10.B.drift.outcomes)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.5764  -1.1603   0.8254   1.1946   1.5317  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.040397   0.028864  -1.400  0.16165    
B0           0.942299   0.115693   8.145 3.80e-16 ***
B0.1         0.759911   0.110382   6.884 5.80e-12 ***
B0.2         0.771284   0.110586   6.975 3.07e-12 ***
B0.3         0.488946   0.105539   4.633 3.61e-06 ***
B0.4         0.282783   0.105032   2.692  0.00710 ** 
B0.5         0.342678   0.105182   3.258  0.00112 ** 
B0.6        -0.004951   0.104470  -0.047  0.96220    
B0.7        -0.232382   0.106089  -2.190  0.02849 *  
B0.8        -0.308271   0.106288  -2.900  0.00373 ** 
B0.9        -0.762501   0.111433  -6.843 7.77e-12 ***
B1          -0.565129   0.105866  -5.338 9.39e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 12759  on 9204  degrees of freedom
Residual deviance: 12437  on 9193  degrees of freedom
  (1295 observations deleted due to missingness)
AIC: 12461

Number of Fisher Scoring iterations: 4
plot_model(cost10.model, show.values = TRUE, value.offset=.3, title="Odds ratios for green outcome")

#determining likelihood of any trait going into fixation by generation 200

cost10.B.drift.outcomes$any.outcome <- NA
cost10.B.drift.outcomes$any.outcome[is.na(cost10.B.drift.outcomes$e)] <- FALSE
cost10.B.drift.outcomes$any.outcome[!is.na(cost10.B.drift.outcomes$e)] <- TRUE
#create model and plot

cost10.model.b <- glm(any.outcome~B, data=cost10.B.drift.outcomes, family="binomial")
summary(cost10.model.b)

Call:
glm(formula = any.outcome ~ B, family = "binomial", data = cost10.B.drift.outcomes)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.5432   0.2835   0.2835   0.6681   0.7122  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  3.19379    0.07269   43.94   <2e-16 ***
B0          -1.95129    0.12958  -15.06   <2e-16 ***
B0.1        -1.80750    0.13336  -13.55   <2e-16 ***
B0.2        -1.80750    0.13336  -13.55   <2e-16 ***
B0.3        -1.70431    0.13640  -12.49   <2e-16 ***
B0.4        -1.83231    0.13267  -13.81   <2e-16 ***
B0.5        -1.80750    0.13336  -13.55   <2e-16 ***
B0.6        -1.84458    0.13233  -13.94   <2e-16 ***
B0.7        -1.91643    0.13045  -14.69   <2e-16 ***
B0.8        -1.88088    0.13136  -14.32   <2e-16 ***
B0.9        -1.75673    0.13482  -13.03   <2e-16 ***
B1          -1.50550    0.14309  -10.52   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 7843.8  on 10499  degrees of freedom
Residual deviance: 7148.4  on 10488  degrees of freedom
AIC: 7172.4

Number of Fisher Scoring iterations: 6
plot_model(cost10.model.b, show.values = TRUE, value.offset=.3, title="Odds ratios for any outcome")
Profiled confidence intervals may take longer time to compute.
  Use `ci_method="wald"` for faster computation of CIs.

#B.25

cost0.B.25.avg <- trait.avg(s1.new.B.25.cost0[[1]])
cost10.B.25.avg <- trait.avg(s1.new.B.25.cost10[[1]])
cost20.B.25.avg <- trait.avg(s1.new.B.25.cost20[[1]])
cost30.B.25.avg <- trait.avg(s1.new.B.25.cost30[[1]])
cost40.B.25.avg <- trait.avg(s1.new.B.25.cost40[[1]])
cost50.B.25.avg <- trait.avg(s1.new.B.25.cost50[[1]])
cost60.B.25.avg <- trait.avg(s1.new.B.25.cost60[[1]])
cost70.B.25.avg <- trait.avg(s1.new.B.25.cost70[[1]])
cost80.B.25.avg <- trait.avg(s1.new.B.25.cost80[[1]])
cost90.B.25.avg <- trait.avg(s1.new.B.25.cost90[[1]])
cost100.B.25.avg <- trait.avg(s1.new.B.25.cost100[[1]])
#group 

B.25.averages <- rbind(cost0.B.25.avg, cost10.B.25.avg, cost20.B.25.avg, cost30.B.25.avg, cost40.B.25.avg, cost50.B.25.avg, cost60.B.25.avg, cost70.B.25.avg, cost80.B.25.avg, cost90.B.25.avg, cost100.B.25.avg)
B.25.averages$cost <- NA
B.25.averages$cost <- rep(seq(0,100,10), each=2000)
library(ggplot2)
ggplot(data=subset(B.25.averages, generation==200), aes(x=cost,y=Freq, color=Var2))+
geom_line()+
scale_color_manual(values=unique(B.25.averages$Var2))+labs(y="frequency")+theme_bw()+theme(legend.position="none")

B.25.cost.drift.outcomes <- rbind(drift5000[[2]], s1.new.B.25.cost0[[2]], s1.new.B.25.cost10[[2]], s1.new.B.25.cost20[[2]], s1.new.B.25.cost30[[2]], s1.new.B.25.cost40[[2]], s1.new.B.25.cost50[[2]], s1.new.B.25.cost60[[2]], s1.new.B.25.cost70[[2]], s1.new.B.25.cost80[[2]], s1.new.B.25.cost90[[2]], s1.new.B.25.cost100[[2]])
B.25.cost.drift.outcomes$cost <- NA
B.25.cost.drift.outcomes$cost[1:5000] <- "drift"
B.25.cost.drift.outcomes$cost[5001:10500] <- rep(seq(0,100,10), each=500)
B.25.cost.drift.outcomes$cost <- factor(B.25.cost.drift.outcomes$cost, levels=c("drift","0","10","20","30","40","50","60","70","80","90","100"))
library(colorRamps)
B.25.cost.drift.outcomes$green.outcome <- NA
B.25.cost.drift.outcomes$green.outcome[B.25.cost.drift.outcomes$e.var %in% blue2green(10)[1:5]] <- FALSE
B.25.cost.drift.outcomes$green.outcome[B.25.cost.drift.outcomes$e.var %in% blue2green(10)[6:10]] <- TRUE
summary(B.25.model)

Call:
glm(formula = green.outcome ~ cost, family = "binomial", data = B.25.cost.drift.outcomes)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.5898  -1.1603   0.8383   1.1946   1.1946  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.04040    0.02886  -1.400  0.16165    
cost0        0.33532    0.10477   3.201  0.00137 ** 
cost10       0.75274    0.11130   6.763 1.35e-11 ***
cost20       0.87331    0.11309   7.722 1.14e-14 ***
cost30       0.60587    0.10758   5.632 1.78e-08 ***
cost40       0.97196    0.11290   8.609  < 2e-16 ***
cost50       0.68635    0.10790   6.361 2.01e-10 ***
cost60       0.90539    0.11258   8.042 8.84e-16 ***
cost70       0.66807    0.10786   6.194 5.88e-10 ***
cost80       0.93899    0.11479   8.180 2.84e-16 ***
cost90       0.79641    0.10978   7.255 4.02e-13 ***
cost100      0.81483    0.11232   7.255 4.03e-13 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 12578  on 9230  degrees of freedom
Residual deviance: 12235  on 9219  degrees of freedom
  (1269 observations deleted due to missingness)
AIC: 12259

Number of Fisher Scoring iterations: 4
plot_model(B.25.model, show.values = TRUE, value.offset=.3, title="Odds ratios for green outcome")

B.25.model.b <- glm(any.outcome~cost, data=B.25.cost.drift.outcomes, family="binomial")
summary(B.25.model.b)

Call:
glm(formula = any.outcome ~ cost, family = "binomial", data = B.25.cost.drift.outcomes)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.5432   0.2835   0.2835   0.6492   0.6976  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  3.19379    0.07269   43.94   <2e-16 ***
cost0       -1.76957    0.13444  -13.16   <2e-16 ***
cost10      -1.90466    0.13075  -14.57   <2e-16 ***
cost20      -1.85677    0.13200  -14.07   <2e-16 ***
cost30      -1.76957    0.13444  -13.16   <2e-16 ***
cost40      -1.62227    0.13902  -11.67   <2e-16 ***
cost50      -1.67744    0.13724  -12.22   <2e-16 ***
cost60      -1.74378    0.13520  -12.90   <2e-16 ***
cost70      -1.70431    0.13640  -12.49   <2e-16 ***
cost80      -1.88088    0.13136  -14.32   <2e-16 ***
cost90      -1.67744    0.13724  -12.22   <2e-16 ***
cost100     -1.89281    0.13105  -14.44   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 7741.2  on 10499  degrees of freedom
Residual deviance: 7078.6  on 10488  degrees of freedom
AIC: 7102.6

Number of Fisher Scoring iterations: 6
plot_model(B.25.model.b, show.values = TRUE, value.offset=.3, title="Odds ratios for any outcome")
Profiled confidence intervals may take longer time to compute.
  Use `ci_method="wald"` for faster computation of CIs.

#B.6

cost0.B.6.avg <- trait.avg(s1.new.B.6.cost0[[1]])
cost10.B.6.avg <- trait.avg(s1.new.B.6.cost10[[1]])
#group 

B.6.averages <- rbind(cost0.B.6.avg, cost10.B.6.avg, cost20.B.6.avg, cost30.B.6.avg, cost40.B.6.avg, cost50.B.6.avg, cost60.B.6.avg, cost70.B.6.avg, cost80.B.6.avg, cost90.B.6.avg, cost100.B.6.avg)
B.6.averages$cost <- NA
B.6.averages$cost <- rep(seq(0,100,10), each=2000)
library(ggplot2)
ggplot(data=subset(B.6.averages, generation==200), aes(x=cost,y=Freq, color=Var2))+
geom_line()+
scale_color_manual(values=unique(B.6.averages$Var2))+labs(y="frequency")+theme_bw()+theme(legend.position="none")

B.6.cost.drift.outcomes <- rbind(drift5000[[2]], s1.new.B.6.cost0[[2]], s1.new.B.6.cost10[[2]], s1.new.B.6.cost20[[2]], s1.new.B.6.cost30[[2]], s1.new.B.6.cost40[[2]], s1.new.B.6.cost50[[2]], s1.new.B.6.cost60[[2]], s1.new.B.6.cost70[[2]], s1.new.B.6.cost80[[2]], s1.new.B.6.cost90[[2]], s1.new.B.6.cost100[[2]])
B.6.cost.drift.outcomes$cost <- NA
B.6.cost.drift.outcomes$cost[1:5000] <- "drift"
B.6.cost.drift.outcomes$cost[5001:10500] <- rep(seq(0,100,10), each=500)
B.6.cost.drift.outcomes$cost <- factor(B.6.cost.drift.outcomes$cost, levels=c("drift","0","10","20","30","40","50","60","70","80","90","100"))
library(colorRamps)
B.6.cost.drift.outcomes$green.outcome <- NA
B.6.cost.drift.outcomes$green.outcome[B.6.cost.drift.outcomes$e.var %in% blue2green(10)[1:5]] <- FALSE
B.6.cost.drift.outcomes$green.outcome[B.6.cost.drift.outcomes$e.var %in% blue2green(10)[6:10]] <- TRUE
library(sjPlot)
B.6.model <- glm(green.outcome~cost, data=B.6.cost.drift.outcomes, family="binomial")
summary(B.6.model)

Call:
glm(formula = green.outcome ~ cost, family = "binomial", data = B.6.cost.drift.outcomes)

Deviance Residuals: 
   Min      1Q  Median      3Q     Max  
-1.244  -1.160  -1.069   1.195   1.289  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)  
(Intercept) -0.040397   0.028864  -1.400   0.1617  
cost0       -0.219280   0.105504  -2.078   0.0377 *
cost10      -0.048771   0.103701  -0.470   0.6381  
cost20       0.196099   0.104494   1.877   0.0606 .
cost30      -0.008874   0.103399  -0.086   0.9316  
cost40      -0.061213   0.104936  -0.583   0.5597  
cost50      -0.044020   0.103809  -0.424   0.6715  
cost60       0.135231   0.104070   1.299   0.1938  
cost70      -0.057242   0.103017  -0.556   0.5784  
cost80       0.050153   0.102905   0.487   0.6260  
cost90      -0.035976   0.105005  -0.343   0.7319  
cost100      0.116000   0.104514   1.110   0.2670  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 12771  on 9214  degrees of freedom
Residual deviance: 12758  on 9203  degrees of freedom
  (1285 observations deleted due to missingness)
AIC: 12782

Number of Fisher Scoring iterations: 3
plot_model(B.6.model, show.values = TRUE, value.offset=.3, title="Odds ratios for green outcome")

#determining likelihood of any trait going into fixation by generation 200

B.6.cost.drift.outcomes$any.outcome <- NA
B.6.cost.drift.outcomes$any.outcome[is.na(B.6.cost.drift.outcomes$e)] <- FALSE
B.6.cost.drift.outcomes$any.outcome[!is.na(B.6.cost.drift.outcomes$e)] <- TRUE

#create model and plot

B.6.model.b <- glm(any.outcome~cost, data=B.6.cost.drift.outcomes, family="binomial")
summary(B.6.model.b)

Call:
glm(formula = any.outcome ~ cost, family = "binomial", data = B.6.cost.drift.outcomes)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.5432   0.2835   0.2835   0.6568   0.6940  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  3.19379    0.07269   43.94   <2e-16 ***
cost0       -1.86887    0.13168  -14.19   <2e-16 ***
cost10      -1.75673    0.13482  -13.03   <2e-16 ***
cost20      -1.81995    0.13301  -13.68   <2e-16 ***
cost30      -1.73073    0.13559  -12.76   <2e-16 ***
cost40      -1.88088    0.13136  -14.32   <2e-16 ***
cost50      -1.76957    0.13444  -13.16   <2e-16 ***
cost60      -1.79495    0.13371  -13.42   <2e-16 ***
cost70      -1.67744    0.13724  -12.22   <2e-16 ***
cost80      -1.67744    0.13724  -12.22   <2e-16 ***
cost90      -1.89281    0.13105  -14.44   <2e-16 ***
cost100     -1.84458    0.13233  -13.94   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 7804.5  on 10499  degrees of freedom
Residual deviance: 7126.7  on 10488  degrees of freedom
AIC: 7150.7

Number of Fisher Scoring iterations: 6
plot_model(B.6.model.b, show.values = TRUE, value.offset=.3, title="Odds ratios for any outcome")
Profiled confidence intervals may take longer time to compute.
  Use `ci_method="wald"` for faster computation of CIs.

#extract odds ratios and confidence intervals from 5 models — varying B and holding cost at 10

B.model1.outputs <- data.frame(model = rep(NA, 11), cost = rep(10,11), B = seq(0,1,0.1), OR = exp(cost10.model$coefficients)[-1], low = exp(confint(cost10.model))[-1,1], high = exp(confint(cost10.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
B.model2.outputs <- data.frame(model = rep(NA, 11), cost = rep(10,11), B = seq(0,1,0.1), OR = exp(s2.cost10.model$coefficients)[-1], low = exp(confint(s2.cost10.model))[-1,1], high = exp(confint(s2.cost10.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
B.model3.outputs <- data.frame(model = rep(NA, 11), cost = rep(10,11), B = seq(0,1,0.1), OR = exp(s3.cost.model$coefficients)[-1], low = exp(confint(s3.cost.model))[-1,1], high = exp(confint(s3.cost.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
B.model4.outputs <- data.frame(model = rep(NA, 11), cost = rep(10,11), B = seq(0,1,0.1), OR = exp(s4.cost.model$coefficients)[-1], low = exp(confint(s4.cost.model))[-1,1], high = exp(confint(s4.cost.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
B.model5.outputs <- data.frame(model = rep(NA, 11), cost = rep(10,11), B = seq(0,1,0.1), OR = exp(s5.cost.model$coefficients)[-1], low = exp(confint(s5.cost.model))[-1,1], high = exp(confint(s5.cost.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
B.model.outputs <- rbind(B.model1.outputs, B.model2.outputs, B.model3.outputs, B.model4.outputs, B.model5.outputs)
ggplot(data = B.model.outputs, aes(x = as.numeric(as.character(B)), y = OR, color = model))+
geom_line()+
geom_point(size = 1)+
geom_ribbon(aes(y = OR, ymin = low, ymax = high), alpha = 0.2)+
scale_color_manual(values=c(blue2green(5)))+
geom_hline(yintercept=1, linetype="dashed", color = "red")+
ylim(0, 111)+
ylab("Odds ratios for a green outcome")+
xlab("Value of B")+
scale_x_continuous(breaks = seq(0, 1, 0.1)) 

ggplot(data = B.model.outputs, aes(x = as.numeric(as.character(B)), y = OR, color = model))+
geom_line()+
geom_point(size = 1)+
scale_color_manual(values=c(blue2green(5)))+
geom_hline(yintercept=1, linetype="dashed", color = "red")+
ylim(0, 111)+
ylab("Odds ratios for a green outcome")+
xlab("Value of B")+
scale_x_continuous(breaks = seq(0, 1, 0.1)) 

ggplot(data = B.model.outputs[-c(which(B.model.outputs$B == 0), which(B.model.outputs$B == 0.1), which(B.model.outputs$B == 0.2), which(B.model.outputs$B == 0.3)),], aes(x = as.numeric(as.character(B)), y = OR, color = model, fill = model))+
geom_line()+
geom_point(size = 1.2)+
scale_color_manual(values=c(blue2green(5)))+
geom_hline(yintercept=1, linetype="dashed", color = "red")+
geom_ribbon(aes(y = OR, ymin = low, ymax = high), alpha = 0.2)+
ylab("Odds ratios for a green outcome")+
xlab("Value of B")+
scale_x_continuous(breaks = seq(0.4, 1, 0.1)) 

ggplot(data = B.model.outputs[c(which(B.model.outputs$B == 0), which(B.model.outputs$B == 0.1), which(B.model.outputs$B == 0.2), which(B.model.outputs$B == 0.3)),], aes(x = as.numeric(as.character(B)), y = OR, color = model, fill = model))+
geom_line()+
geom_point(size = 1.2)+
scale_color_manual(values=c(blue2green(5)))+
geom_hline(yintercept=1, linetype="dashed", color = "red")+
geom_ribbon(aes(y = OR, ymin = low, ymax = high), alpha = 0.2)+
ylab("Odds ratios for a green outcome")+
xlab("Value of B")+
ylim(0,10)+
scale_x_continuous(breaks = seq(0, 0.4, 0.1)) 

#extract odds ratios and confidence intervals from 5 models — varying cost and holding B at 0.6 (0.7 and 0.8 in models 2 and 5, respectively)

cost.model1.outputs <- data.frame(model = rep(NA, 11), B = rep(0.6,11), cost = seq(0,100,10), OR = exp(B.6.model$coefficients)[-1], low = exp(confint(B.6.model))[-1,1], high = exp(confint(B.6.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
cost.model2.outputs <- data.frame(model = rep(NA, 11), B = rep(0.7,11), cost = seq(0,100,10), OR = exp(s2.B.7.model$coefficients)[-1], low = exp(confint(s2.B.7.model))[-1,1], high = exp(confint(s2.B.7.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
cost.model3.outputs <- data.frame(model = rep(NA, 11), B = rep(0.6,11), cost = seq(0,100,10), OR = exp(s3.B.6.model$coefficients)[-1], low = exp(confint(s3.B.6.model))[-1,1], high = exp(confint(s3.B.6.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
cost.model4.outputs <- data.frame(model = rep(NA, 11), B = rep(0.6,11), cost = seq(0,100,10), OR = exp(s4.B.6.model$coefficients)[-1], low = exp(confint(s4.B.6.model))[-1,1], high = exp(confint(s4.B.6.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
cost.model5.outputs <- data.frame(model = rep(NA, 11), B = rep(0.8,11), cost = seq(0,100,10), OR = exp(s5.B.8.model$coefficients)[-1], low = exp(confint(s5.B.8.model))[-1,1], high = exp(confint(s5.B.8.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
cost.model.outputs <- rbind(cost.model1.outputs, cost.model2.outputs, cost.model3.outputs, cost.model4.outputs, cost.model5.outputs)

cost.model.outputs$model[1:11] <- "Model 1"
cost.model.outputs$model[12:22] <- "Model 2"
cost.model.outputs$model[23:33] <- "Model 3"
cost.model.outputs$model[34:44] <- "Model 4"
cost.model.outputs$model[45:55] <- "Model 5"
cost.model.outputs$model <- factor(B.model.outputs$model)
ggplot(data = cost.model.outputs, aes(x = as.numeric(as.character(cost)), y = OR, color = model))+
geom_line()+
geom_point(size = 1)+
geom_ribbon(aes(y = OR, ymin = low, ymax = high, fill=model), alpha = 0.2)+
scale_color_manual(values=c(blue2green(5)))+
geom_hline(yintercept=1, linetype="dashed", color = "red")+
ylim(0, 2.5)+
ylab("Odds ratios for a green outcome")+
xlab("Value of cost")+
scale_x_continuous(breaks = seq(0, 100, 10)) 

B0.cost.drift.outcomes <- rbind(drift5000[[2]], s1.new.B0.cost0[[2]], s1.new.B0.cost10[[2]], s1.new.B0.cost20[[2]], s1.new.B0.cost30[[2]], s1.new.B0.cost40[[2]], s1.new.B0.cost50[[2]], s1.new.B0.cost60[[2]], s1.new.B0.cost70[[2]], s1.new.B0.cost80[[2]], s1.new.B0.cost90[[2]], s1.new.B0.cost100[[2]])
B0.cost.drift.outcomes$cost <- NA
B0.cost.drift.outcomes$cost[1:5000] <- "drift"
B0.cost.drift.outcomes$cost[5001:10500] <- rep(seq(0,100,10), each=500)
B0.cost.drift.outcomes$cost <- factor(B0.cost.drift.outcomes$cost, levels=c("drift","0","10","20","30","40","50","60","70","80","90","100"))
library(colorRamps)
B0.cost.drift.outcomes$green.outcome <- NA
B0.cost.drift.outcomes$green.outcome[B0.cost.drift.outcomes$e.var %in% blue2green(10)[1:5]] <- FALSE
B0.cost.drift.outcomes$green.outcome[B0.cost.drift.outcomes$e.var %in% blue2green(10)[6:10]] <- TRUE
library(sjPlot)
B0.model <- glm(green.outcome~cost, data=B0.cost.drift.outcomes, family="binomial")
summary(B0.model)

Call:
glm(formula = green.outcome ~ cost, family = "binomial", data = B0.cost.drift.outcomes)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.6515  -1.1603   0.8024   1.1946   1.1946  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.04040    0.02886  -1.400    0.162    
cost0        0.13055    0.09930   1.315    0.189    
cost10       0.96368    0.11441   8.423  < 2e-16 ***
cost20       0.97704    0.11765   8.305  < 2e-16 ***
cost30       0.89809    0.11141   8.061 7.54e-16 ***
cost40       1.00853    0.11615   8.683  < 2e-16 ***
cost50       1.10886    0.11889   9.327  < 2e-16 ***
cost60       0.87918    0.11389   7.720 1.17e-14 ***
cost70       0.92423    0.11273   8.198 2.44e-16 ***
cost80       0.93737    0.11435   8.198 2.45e-16 ***
cost90       1.02796    0.11488   8.948  < 2e-16 ***
cost100      0.86202    0.11155   7.728 1.10e-14 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 12521  on 9241  degrees of freedom
Residual deviance: 12046  on 9230  degrees of freedom
  (1258 observations deleted due to missingness)
AIC: 12070

Number of Fisher Scoring iterations: 4
plot_model(B0.model, show.values = TRUE, value.offset=.3, title="Odds ratios for green outcome")

B.75.cost.drift.outcomes <- rbind(drift5000[[2]], s1.new.B.75.cost0[[2]], s1.new.B.75.cost10[[2]], s1.new.B.75.cost20[[2]], s1.new.B.75.cost30[[2]], s1.new.B.75.cost40[[2]], s1.new.B.75.cost50[[2]], s1.new.B.75.cost60[[2]], s1.new.B.75.cost70[[2]], s1.new.B.75.cost80[[2]], s1.new.B.75.cost90[[2]], s1.new.B.75.cost100[[2]])
B.75.cost.drift.outcomes$cost <- NA
B.75.cost.drift.outcomes$cost[1:5000] <- "drift"
B.75.cost.drift.outcomes$cost[5001:10500] <- rep(seq(0,100,10), each=500)
B.75.cost.drift.outcomes$cost <- factor(B.75.cost.drift.outcomes$cost, levels=c("drift","0","10","20","30","40","50","60","70","80","90","100"))
library(colorRamps)
B.75.cost.drift.outcomes$green.outcome <- NA
B.75.cost.drift.outcomes$green.outcome[B.75.cost.drift.outcomes$e.var %in% blue2green(10)[1:5]] <- FALSE
B.75.cost.drift.outcomes$green.outcome[B.75.cost.drift.outcomes$e.var %in% blue2green(10)[6:10]] <- TRUE
library(sjPlot)
B.75.model <- glm(green.outcome~cost, data=B.75.cost.drift.outcomes, family="binomial")
summary(B.75.model)

Call:
glm(formula = green.outcome ~ cost, family = "binomial", data = B.75.cost.drift.outcomes)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.1795  -1.1603  -0.9685   1.1946   1.4357  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.04040    0.02886  -1.400  0.16165    
cost0       -0.54890    0.10682  -5.139 2.77e-07 ***
cost10      -0.19994    0.10564  -1.893  0.05840 .  
cost20      -0.30294    0.10550  -2.871  0.00409 ** 
cost30      -0.32780    0.10559  -3.104  0.00191 ** 
cost40      -0.32305    0.10629  -3.039  0.00237 ** 
cost50      -0.43204    0.10665  -4.051 5.10e-05 ***
cost60      -0.32733    0.10620  -3.082  0.00206 ** 
cost70      -0.32968    0.10586  -3.114  0.00184 ** 
cost80      -0.45318    0.10690  -4.239 2.24e-05 ***
cost90      -0.47311    0.10752  -4.400 1.08e-05 ***
cost100      0.04538    0.10396   0.437  0.66244    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 12664  on 9199  degrees of freedom
Residual deviance: 12577  on 9188  degrees of freedom
  (1300 observations deleted due to missingness)
AIC: 12601

Number of Fisher Scoring iterations: 4
plot_model(B.75.model, show.values = TRUE, value.offset=.3, title="Odds ratios for green outcome")

B.75.model <- glm(green.outcome~cost, data=B.75.cost.drift.outcomes, family="binomial")
summary(B.75.model)

Call:
glm(formula = green.outcome ~ cost, family = "binomial", data = B.75.cost.drift.outcomes)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.1795  -1.1603  -0.9685   1.1946   1.4357  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.04040    0.02886  -1.400  0.16165    
cost0       -0.54890    0.10682  -5.139 2.77e-07 ***
cost10      -0.19994    0.10564  -1.893  0.05840 .  
cost20      -0.30294    0.10550  -2.871  0.00409 ** 
cost30      -0.32780    0.10559  -3.104  0.00191 ** 
cost40      -0.32305    0.10629  -3.039  0.00237 ** 
cost50      -0.43204    0.10665  -4.051 5.10e-05 ***
cost60      -0.32733    0.10620  -3.082  0.00206 ** 
cost70      -0.32968    0.10586  -3.114  0.00184 ** 
cost80      -0.45318    0.10690  -4.239 2.24e-05 ***
cost90      -0.47311    0.10752  -4.400 1.08e-05 ***
cost100      0.04538    0.10396   0.437  0.66244    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 12664  on 9199  degrees of freedom
Residual deviance: 12577  on 9188  degrees of freedom
  (1300 observations deleted due to missingness)
AIC: 12601

Number of Fisher Scoring iterations: 4
plot_model(B.75.model, show.values = TRUE, value.offset=.3, title="Odds ratios for green outcome")

B1.cost.drift.outcomes <- rbind(drift5000[[2]], s1.new.B1.cost0[[2]], s1.new.B1.cost10[[2]], s1.new.B1.cost20[[2]], s1.new.B1.cost30[[2]], s1.new.B1.cost40[[2]], s1.new.B1.cost50[[2]], s1.new.B1.cost60[[2]], s1.new.B1.cost70[[2]], s1.new.B1.cost80[[2]], s1.new.B1.cost90[[2]], s1.new.B1.cost100[[2]])
B1.cost.drift.outcomes$cost <- NA
B1.cost.drift.outcomes$cost[1:5000] <- "drift"
B1.cost.drift.outcomes$cost[5001:10500] <- rep(seq(0,100,10), each=500)
B1.cost.drift.outcomes$cost <- factor(B1.cost.drift.outcomes$cost, levels=c("drift","0","10","20","30","40","50","60","70","80","90","100"))
library(colorRamps)
B1.cost.drift.outcomes$green.outcome <- NA
B1.cost.drift.outcomes$green.outcome[B1.cost.drift.outcomes$e.var %in% blue2green(10)[1:5]] <- FALSE
B1.cost.drift.outcomes$green.outcome[B1.cost.drift.outcomes$e.var %in% blue2green(10)[6:10]] <- TRUE
library(sjPlot)
B1.model <- glm(green.outcome~cost, data=B1.cost.drift.outcomes, family="binomial")
summary(B1.model)

Call:
glm(formula = green.outcome ~ cost, family = "binomial", data = B1.cost.drift.outcomes)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.1603  -1.1603  -0.9225   1.1946   1.4791  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.04040    0.02886  -1.400  0.16165    
cost0       -0.48750    0.10659  -4.574 4.80e-06 ***
cost10      -0.64553    0.10794  -5.981 2.22e-09 ***
cost20      -0.46136    0.10579  -4.361 1.29e-05 ***
cost30      -0.30791    0.10482  -2.938  0.00331 ** 
cost40      -0.53970    0.10766  -5.013 5.36e-07 ***
cost50      -0.51641    0.10542  -4.898 9.66e-07 ***
cost60      -0.59379    0.11187  -5.308 1.11e-07 ***
cost70      -0.48570    0.10503  -4.624 3.76e-06 ***
cost80      -0.32593    0.10533  -3.094  0.00197 ** 
cost90      -0.63061    0.10892  -5.790 7.06e-09 ***
cost100     -0.58401    0.10757  -5.429 5.67e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 12688  on 9281  degrees of freedom
Residual deviance: 12532  on 9270  degrees of freedom
  (1218 observations deleted due to missingness)
AIC: 12556

Number of Fisher Scoring iterations: 4
plot_model(B1.model, show.values = TRUE, value.offset=.3, title="Odds ratios for green outcome")

#model 1 B model outputs

cost.model1.B0.outputs <- data.frame(model = rep(NA, 11), B = rep(0,11), cost = seq(0,100,10), OR = exp(B0.model$coefficients)[-1], low = exp(confint(B0.model))[-1,1], high = exp(confint(B0.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
cost.model1.B.25.outputs <- data.frame(model = rep(NA, 11), B = rep(0.25,11), cost = seq(0,100,10), OR = exp(B.25.model$coefficients)[-1], low = exp(confint(B.25.model))[-1,1], high = exp(confint(B.25.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
cost.model1.B.6.outputs <- data.frame(model = rep(NA, 11), B = rep(0.6,11), cost = seq(0,100,10), OR = exp(B.6.model$coefficients)[-1], low = exp(confint(B.6.model))[-1,1], high = exp(confint(B.6.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
cost.model1.B.75.outputs <- data.frame(model = rep(NA, 11), B = rep(0.75,11), cost = seq(0,100,10), OR = exp(B.75.model$coefficients)[-1], low = exp(confint(B.75.model))[-1,1], high = exp(confint(B.75.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
cost.model1.B1.outputs <- data.frame(model = rep(NA, 11), B = rep(1,11), cost = seq(0,100,10), OR = exp(B1.model$coefficients)[-1], low = exp(confint(B1.model))[-1,1], high = exp(confint(B1.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
B.model1.outputs <- rbind(cost.model1.B0.outputs, cost.model1.B.25.outputs, cost.model1.B.6.outputs, cost.model1.B.75.outputs, cost.model1.B1.outputs)

B.model1.outputs$model[1:11] <- "B = 0"
B.model1.outputs$model[12:22] <- "B = .25"
B.model1.outputs$model[23:33] <- "B = .6"
B.model1.outputs$model[34:44] <- "B = .75"
B.model1.outputs$model[45:55] <- "B = 1"
B.model1.outputs$model <- factor(B.model1.outputs$model)
ggplot(data = B.model1.outputs, aes(x = as.numeric(as.character(cost)), y = OR, color = model))+
geom_line()+
geom_point(size = 1)+
geom_ribbon(aes(y = OR, ymin = low, ymax = high, fill=model), alpha = 0.2)+
scale_color_manual(values=c(blue2green(5)))+
geom_hline(yintercept=1, linetype="dashed", color = "red")+
ylim(0, 4)+
ylab("Odds ratios for a green outcome")+
xlab("Value of cost")+
scale_x_continuous(breaks = seq(0, 100, 10))+
theme(legend.title=element_blank())

cost0.B.drift.outcomes <- rbind(drift5000[[2]], s1.new.B0.cost0[[2]], s1.new.B.1.cost0[[2]], s1.new.B.2.cost0[[2]], s1.new.B.3.cost0[[2]], s1.new.B.4.cost0[[2]], s1.new.B.5.cost0[[2]], s1.new.B.6.cost0[[2]], s1.new.B.7.cost0[[2]], s1.new.B.8.cost0[[2]], s1.new.B.9.cost0[[2]], s1.new.B1.cost0[[2]])
cost0.B.drift.outcomes$B <- NA
cost0.B.drift.outcomes$B[1:5000] <- "drift"
cost0.B.drift.outcomes$B[5001:10500] <- rep(seq(0,1,0.1), each=500)
cost0.B.drift.outcomes$B <- factor(cost0.B.drift.outcomes$B, levels=c("drift","0","0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9","1"))
library(colorRamps)
cost0.B.drift.outcomes$green.outcome <- NA
cost0.B.drift.outcomes$green.outcome[cost0.B.drift.outcomes$e.var %in% blue2green(10)[1:5]] <- FALSE
cost0.B.drift.outcomes$green.outcome[cost0.B.drift.outcomes$e.var %in% blue2green(10)[6:10]] <- TRUE
library(sjPlot)
cost0.model <- glm(green.outcome~B, data=cost0.B.drift.outcomes, family="binomial")
summary(cost0.model)

Call:
glm(formula = green.outcome ~ B, family = "binomial", data = cost0.B.drift.outcomes)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.3511  -1.1603  -0.9141   1.1946   1.4658  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.04040    0.02886  -1.400  0.16165    
B0           0.13055    0.09930   1.315  0.18862    
B0.1         0.33374    0.10369   3.219  0.00129 ** 
B0.2         0.43993    0.10353   4.249 2.14e-05 ***
B0.3         0.12166    0.10489   1.160  0.24610    
B0.4        -0.20399    0.10444  -1.953  0.05080 .  
B0.5         0.14368    0.10338   1.390  0.16457    
B0.6        -0.21928    0.10551  -2.078  0.03767 *  
B0.7        -0.47170    0.10497  -4.494 7.00e-06 ***
B0.8        -0.61612    0.10844  -5.682 1.33e-08 ***
B0.9        -0.56194    0.10761  -5.222 1.77e-07 ***
B1          -0.48750    0.10659  -4.574 4.80e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 12897  on 9318  degrees of freedom
Residual deviance: 12746  on 9307  degrees of freedom
  (1181 observations deleted due to missingness)
AIC: 12770

Number of Fisher Scoring iterations: 4
plot_model(cost0.model, show.values = TRUE, value.offset=.3, title="Odds ratios for green outcome")

cost25.B.drift.outcomes <- rbind(drift5000[[2]], s1.new.B0.cost25[[2]], s1.new.B.1.cost25[[2]], s1.new.B.2.cost25[[2]], s1.new.B.3.cost25[[2]], s1.new.B.4.cost25[[2]], s1.new.B.5.cost25[[2]], s1.new.B.6.cost25[[2]], s1.new.B.7.cost25[[2]], s1.new.B.8.cost25[[2]], s1.new.B.9.cost25[[2]], s1.new.B1.cost25[[2]])
cost25.B.drift.outcomes$B <- NA
cost25.B.drift.outcomes$B[1:5000] <- "drift"
cost25.B.drift.outcomes$B[5001:10500] <- rep(seq(0,1,0.1), each=500)
cost25.B.drift.outcomes$B <- factor(cost25.B.drift.outcomes$B, levels=c("drift","0","0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9","1"))
library(colorRamps)
cost25.B.drift.outcomes$green.outcome <- NA
cost25.B.drift.outcomes$green.outcome[cost25.B.drift.outcomes$e.var %in% blue2green(10)[1:5]] <- FALSE
cost25.B.drift.outcomes$green.outcome[cost25.B.drift.outcomes$e.var %in% blue2green(10)[6:10]] <- TRUE
library(sjPlot)
cost25.model <- glm(green.outcome~B, data=cost25.B.drift.outcomes, family="binomial")
summary(cost25.model)

Call:
glm(formula = green.outcome ~ B, family = "binomial", data = cost25.B.drift.outcomes)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.5981  -1.1603   0.8087   1.1946   1.3994  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.04040    0.02886  -1.400 0.161651    
B0           0.99035    0.11544   8.579  < 2e-16 ***
B0.1         0.90721    0.11435   7.933 2.13e-15 ***
B0.2         0.94091    0.11429   8.233  < 2e-16 ***
B0.3         0.74121    0.11110   6.672 2.53e-11 ***
B0.4         0.39114    0.10448   3.743 0.000181 ***
B0.5         0.23097    0.10452   2.210 0.027115 *  
B0.6         0.18457    0.10397   1.775 0.075875 .  
B0.7        -0.22959    0.10557  -2.175 0.029654 *  
B0.8        -0.24444    0.10387  -2.353 0.018603 *  
B0.9        -0.35891    0.10528  -3.409 0.000651 ***
B1          -0.46783    0.10599  -4.414 1.01e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 12760  on 9215  degrees of freedom
Residual deviance: 12433  on 9204  degrees of freedom
  (1284 observations deleted due to missingness)
AIC: 12457

Number of Fisher Scoring iterations: 4
plot_model(cost25.model, show.values = TRUE, value.offset=.3, title="Odds ratios for green outcome")

cost50.B.drift.outcomes <- rbind(drift5000[[2]], s1.new.B0.cost50[[2]], s1.new.B.1.cost50[[2]], s1.new.B.2.cost50[[2]], s1.new.B.3.cost50[[2]], s1.new.B.4.cost50[[2]], s1.new.B.5.cost50[[2]], s1.new.B.6.cost50[[2]], s1.new.B.7.cost50[[2]], s1.new.B.8.cost50[[2]], s1.new.B.9.cost50[[2]], s1.new.B1.cost50[[2]])
cost50.B.drift.outcomes$B <- NA
cost50.B.drift.outcomes$B[1:5000] <- "drift"
cost50.B.drift.outcomes$B[5001:10500] <- rep(seq(0,1,0.1), each=500)
cost50.B.drift.outcomes$B <- factor(cost50.B.drift.outcomes$B, levels=c("drift","0","0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9","1"))
library(colorRamps)
cost50.B.drift.outcomes$green.outcome <- NA
cost50.B.drift.outcomes$green.outcome[cost50.B.drift.outcomes$e.var %in% blue2green(10)[1:5]] <- FALSE
cost50.B.drift.outcomes$green.outcome[cost50.B.drift.outcomes$e.var %in% blue2green(10)[6:10]] <- TRUE
library(sjPlot)
cost50.model <- glm(green.outcome~B, data=cost50.B.drift.outcomes, family="binomial")
summary(cost50.model)

Call:
glm(formula = green.outcome ~ B, family = "binomial", data = cost50.B.drift.outcomes)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.6515  -1.1603   0.7685   1.1946   1.4211  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.04040    0.02886  -1.400 0.161651    
B0           1.10886    0.11889   9.327  < 2e-16 ***
B0.1         0.88648    0.11377   7.792 6.61e-15 ***
B0.2         0.66113    0.11018   6.001 1.96e-09 ***
B0.3         0.49359    0.10834   4.556 5.21e-06 ***
B0.4         0.25569    0.10452   2.446 0.014432 *  
B0.5         0.36937    0.10407   3.549 0.000387 ***
B0.6        -0.04402    0.10381  -0.424 0.671529    
B0.7        -0.33909    0.10784  -3.144 0.001664 ** 
B0.8        -0.09447    0.10418  -0.907 0.364516    
B0.9        -0.34649    0.10552  -3.284 0.001025 ** 
B1          -0.51641    0.10542  -4.898 9.66e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 12731  on 9188  degrees of freedom
Residual deviance: 12441  on 9177  degrees of freedom
  (1311 observations deleted due to missingness)
AIC: 12465

Number of Fisher Scoring iterations: 4
plot_model(cost50.model, show.values = TRUE, value.offset=.3, title="Odds ratios for green outcome")

cost75.B.drift.outcomes <- rbind(drift5000[[2]], s1.new.B0.cost75[[2]], s1.new.B.1.cost75[[2]], s1.new.B.2.cost75[[2]], s1.new.B.3.cost75[[2]], s1.new.B.4.cost75[[2]], s1.new.B.5.cost75[[2]], s1.new.B.6.cost75[[2]], s1.new.B.7.cost75[[2]], s1.new.B.8.cost75[[2]], s1.new.B.9.cost75[[2]], s1.new.B1.cost75[[2]])
cost75.B.drift.outcomes$B <- NA
cost75.B.drift.outcomes$B[1:5000] <- "drift"
cost75.B.drift.outcomes$B[5001:10500] <- rep(seq(0,1,0.1), each=500)
cost75.B.drift.outcomes$B <- factor(cost75.B.drift.outcomes$B, levels=c("drift","0","0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9","1"))
library(colorRamps)
cost75.B.drift.outcomes$green.outcome <- NA
cost75.B.drift.outcomes$green.outcome[cost75.B.drift.outcomes$e.var %in% blue2green(10)[1:5]] <- FALSE
cost75.B.drift.outcomes$green.outcome[cost75.B.drift.outcomes$e.var %in% blue2green(10)[6:10]] <- TRUE
library(sjPlot)
cost75.model <- glm(green.outcome~B, data=cost75.B.drift.outcomes, family="binomial")
summary(cost75.model)

Call:
glm(formula = green.outcome ~ B, family = "binomial", data = cost75.B.drift.outcomes)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.6636  -1.1603   0.7597   1.1946   1.4404  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.04040    0.02886  -1.400 0.161651    
B0           1.13560    0.12021   9.447  < 2e-16 ***
B0.1         0.99522    0.11488   8.663  < 2e-16 ***
B0.2         0.91727    0.11284   8.129 4.33e-16 ***
B0.3         0.69744    0.10771   6.475 9.48e-11 ***
B0.4         0.27796    0.10404   2.672 0.007549 ** 
B0.5         0.20960    0.10553   1.986 0.047019 *  
B0.6         0.04040    0.10384   0.389 0.697262    
B0.7        -0.02180    0.10586  -0.206 0.836846    
B0.8        -0.30617    0.10457  -2.928 0.003412 ** 
B0.9        -0.55949    0.10697  -5.231 1.69e-07 ***
B1          -0.41280    0.10834  -3.810 0.000139 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 12748  on 9205  degrees of freedom
Residual deviance: 12387  on 9194  degrees of freedom
  (1294 observations deleted due to missingness)
AIC: 12411

Number of Fisher Scoring iterations: 4
plot_model(cost75.model, show.values = TRUE, value.offset=.3, title="Odds ratios for green outcome")

cost100.B.drift.outcomes <- rbind(drift5000[[2]], s1.new.B0.cost100[[2]], s1.new.B.1.cost100[[2]], s1.new.B.2.cost100[[2]], s1.new.B.3.cost100[[2]], s1.new.B.4.cost100[[2]], s1.new.B.5.cost100[[2]], s1.new.B.6.cost100[[2]], s1.new.B.7.cost100[[2]], s1.new.B.8.cost100[[2]], s1.new.B.9.cost100[[2]], s1.new.B1.cost100[[2]])
cost100.B.drift.outcomes$B <- NA
cost100.B.drift.outcomes$B[1:5000] <- "drift"
cost100.B.drift.outcomes$B[5001:10500] <- rep(seq(0,1,0.1), each=500)
cost100.B.drift.outcomes$B <- factor(cost100.B.drift.outcomes$B, levels=c("drift","0","0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9","1"))
library(colorRamps)
cost100.B.drift.outcomes$green.outcome <- NA
cost100.B.drift.outcomes$green.outcome[cost100.B.drift.outcomes$e.var %in% blue2green(10)[1:5]] <- FALSE
cost100.B.drift.outcomes$green.outcome[cost100.B.drift.outcomes$e.var %in% blue2green(10)[6:10]] <- TRUE
library(sjPlot)
cost100.model <- glm(green.outcome~B, data=cost100.B.drift.outcomes, family="binomial")
summary(cost100.model)

Call:
glm(formula = green.outcome ~ B, family = "binomial", data = cost100.B.drift.outcomes)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.5877  -1.1603   0.8166   1.1946   1.4336  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.04040    0.02886  -1.400  0.16165    
B0           0.94810    0.11326   8.371  < 2e-16 ***
B0.1         0.96734    0.11531   8.389  < 2e-16 ***
B0.2         0.76707    0.10987   6.981 2.92e-12 ***
B0.3         0.57884    0.10673   5.423 5.84e-08 ***
B0.4         0.45007    0.10660   4.222 2.42e-05 ***
B0.5         0.37937    0.10415   3.642  0.00027 ***
B0.6         0.11600    0.10451   1.110  0.26704    
B0.7        -0.14668    0.10624  -1.381  0.16740    
B0.8        -0.33584    0.10603  -3.167  0.00154 ** 
B0.9        -0.27913    0.10483  -2.663  0.00775 ** 
B1          -0.54423    0.10899  -4.994 5.93e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 12743  on 9202  degrees of freedom
Residual deviance: 12437  on 9191  degrees of freedom
  (1297 observations deleted due to missingness)
AIC: 12461

Number of Fisher Scoring iterations: 4
plot_model(cost100.model, show.values = TRUE, value.offset=.3, title="Odds ratios for green outcome")

#model 1 cost model outputs

B.model1.cost0.outputs <- data.frame(model = rep(NA, 11), cost = rep(0,11), B = seq(0,1,0.1), OR = exp(cost0.model$coefficients)[-1], low = exp(confint(cost0.model))[-1,1], high = exp(confint(cost0.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
B.model1.cost10.outputs <- data.frame(model = rep(NA, 11), cost = rep(10,11), B = seq(0,1,0.1), OR = exp(cost10.model$coefficients)[-1], low = exp(confint(cost10.model))[-1,1], high = exp(confint(cost10.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
B.model1.cost25.outputs <- data.frame(model = rep(NA, 11), cost = rep(25,11), B = seq(0,1,0.1), OR = exp(cost25.model$coefficients)[-1], low = exp(confint(cost25.model))[-1,1], high = exp(confint(cost25.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
B.model1.cost50.outputs <- data.frame(model = rep(NA, 11), cost = rep(50,11), B = seq(0,1,0.1), OR = exp(cost50.model$coefficients)[-1], low = exp(confint(cost50.model))[-1,1], high = exp(confint(cost50.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
B.model1.cost75.outputs <- data.frame(model = rep(NA, 11), cost = rep(75,11), B = seq(0,1,0.1), OR = exp(cost75.model$coefficients)[-1], low = exp(confint(cost75.model))[-1,1], high = exp(confint(cost75.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
B.model1.cost100.outputs <- data.frame(model = rep(NA, 11), cost = rep(100,11), B = seq(0,1,0.1), OR = exp(cost100.model$coefficients)[-1], low = exp(confint(cost100.model))[-1,1], high = exp(confint(cost100.model))[-1,2])
Waiting for profiling to be done...
Waiting for profiling to be done...
cost.model1.outputs <- rbind(B.model1.cost0.outputs, B.model1.cost10.outputs, B.model1.cost25.outputs, B.model1.cost50.outputs, B.model1.cost75.outputs, B.model1.cost100.outputs)

cost.model1.outputs$model[1:11] <- "cost = 0"
cost.model1.outputs$model[12:22] <- "cost = 10"
cost.model1.outputs$model[23:33] <- "cost = 25"
cost.model1.outputs$model[34:44] <- "cost = 50"
cost.model1.outputs$model[45:55] <- "cost = 75"
cost.model1.outputs$model[56:66] <- "cost = 100"


cost.model1.outputs$model <- factor(cost.model1.outputs$model)
ggplot(data = cost.model1.outputs, aes(x = as.numeric(as.character(B)), y = OR, color = model))+
geom_line()+
geom_point(size = 1)+
geom_ribbon(aes(y = OR, ymin = low, ymax = high, fill=model), alpha = 0.2)+
scale_color_manual(values=c(blue2green(6)))+
geom_hline(yintercept=1, linetype="dashed", color = "red")+
ylim(0, 4)+
ylab("Odds ratios for a green outcome")+
xlab("Value of B")+
scale_x_continuous(breaks = seq(0, 1, .1))+
theme(legend.title=element_blank())

LS0tCnRpdGxlOiAiU2hpYmJvbGV0aCBtb2RlbCAxIGFuYWx5c2VzIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7cn0KI3Rha2UgYXZlcmFnZXMKCmNvc3QxMC5CMC5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CMC5jb3N0MTBbWzFdXSkKY29zdDEwLkIuMS5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjEuY29zdDEwW1sxXV0pCmNvc3QxMC5CLjIuYXZnIDwtIHRyYWl0LmF2ZyhzMS5uZXcuQi4yLmNvc3QxMFtbMV1dKQpjb3N0MTAuQi4zLmF2ZyA8LSB0cmFpdC5hdmcoczEubmV3LkIuMy5jb3N0MTBbWzFdXSkKY29zdDEwLkIuNC5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjQuY29zdDEwW1sxXV0pCmNvc3QxMC5CLjUuYXZnIDwtIHRyYWl0LmF2ZyhzMS5uZXcuQi41LmNvc3QxMFtbMV1dKQpjb3N0MTAuQi42LmF2ZyA8LSB0cmFpdC5hdmcoczEubmV3LkIuNi5jb3N0MTBbWzFdXSkKY29zdDEwLkIuNy5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjcuY29zdDEwW1sxXV0pCmNvc3QxMC5CLjguYXZnIDwtIHRyYWl0LmF2ZyhzMS5uZXcuQi44LmNvc3QxMFtbMV1dKQpjb3N0MTAuQi45LmF2ZyA8LSB0cmFpdC5hdmcoczEubmV3LkIuOS5jb3N0MTBbWzFdXSkKY29zdDEwLkIxLmF2ZyA8LSB0cmFpdC5hdmcoczEubmV3LkIxLmNvc3QxMFtbMV1dKQpgYGAKCgpgYGB7cn0KI2dyb3VwIAoKY29zdDEwLmF2ZXJhZ2VzIDwtIHJiaW5kKGNvc3QxMC5CMC5hdmcsIGNvc3QxMC5CLjEuYXZnLCBjb3N0MTAuQi4yLmF2ZywgY29zdDEwLkIuMy5hdmcsIGNvc3QxMC5CLjQuYXZnLCBjb3N0MTAuQi41LmF2ZywgY29zdDEwLkIuNi5hdmcsIGNvc3QxMC5CLjcuYXZnLCBjb3N0MTAuQi44LmF2ZywgY29zdDEwLkIuOS5hdmcsIGNvc3QxMC5CMS5hdmcpCmBgYAoKYGBge3J9CmNvc3QxMC5hdmVyYWdlcyRCIDwtIE5BCmNvc3QxMC5hdmVyYWdlcyRCIDwtIHJlcChzZXEoMCwxLDAuMSksIGVhY2g9MjAwMCkKYGBgCgpgYGB7cn0KbGlicmFyeShnZ3Bsb3QyKQpnZ3Bsb3QoZGF0YT1zdWJzZXQoY29zdDEwLmF2ZXJhZ2VzLCBnZW5lcmF0aW9uPT0yMDApLCBhZXMoeD1CLHk9RnJlcSwgY29sb3I9VmFyMikpKwpnZW9tX2xpbmUoKSsKc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz11bmlxdWUoY29zdDEwLmF2ZXJhZ2VzJFZhcjIpKStsYWJzKHk9ImZyZXF1ZW5jeSIpK3RoZW1lX2J3KCkrdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikKYGBgCgpgYGB7cn0KY29zdDEwLkIuZHJpZnQub3V0Y29tZXMgPC0gcmJpbmQoZHJpZnQ1MDAwW1syXV0sIHMxLm5ldy5CMC5jb3N0MTBbWzJdXSwgczEubmV3LkIuMS5jb3N0MTBbWzJdXSwgczEubmV3LkIuMi5jb3N0MTBbWzJdXSwgczEubmV3LkIuMy5jb3N0MTBbWzJdXSwgczEubmV3LkIuNC5jb3N0MTBbWzJdXSwgczEubmV3LkIuNS5jb3N0MTBbWzJdXSwgczEubmV3LkIuNi5jb3N0MTBbWzJdXSwgczEubmV3LkIuNy5jb3N0MTBbWzJdXSwgczEubmV3LkIuOC5jb3N0MTBbWzJdXSwgczEubmV3LkIuOS5jb3N0MTBbWzJdXSwgczEubmV3LkIxLmNvc3QxMFtbMl1dKQpgYGAKCmBgYHtyfQpjb3N0MTAuQi5kcmlmdC5vdXRjb21lcyRCIDwtIE5BCmNvc3QxMC5CLmRyaWZ0Lm91dGNvbWVzJEJbMTo1MDAwXSA8LSAiZHJpZnQiCmNvc3QxMC5CLmRyaWZ0Lm91dGNvbWVzJEJbNTAwMToxMDUwMF0gPC0gcmVwKHNlcSgwLDEsMC4xKSwgZWFjaD01MDApCmNvc3QxMC5CLmRyaWZ0Lm91dGNvbWVzJEIgPC0gZmFjdG9yKGNvc3QxMC5CLmRyaWZ0Lm91dGNvbWVzJEIsIGxldmVscz1jKCJkcmlmdCIsIjAiLCIwLjEiLCIwLjIiLCIwLjMiLCIwLjQiLCIwLjUiLCIwLjYiLCIwLjciLCIwLjgiLCIwLjkiLCIxIikpCmBgYAoKYGBge3J9CmxpYnJhcnkoY29sb3JSYW1wcykKY29zdDEwLkIuZHJpZnQub3V0Y29tZXMkZ3JlZW4ub3V0Y29tZSA8LSBOQQpjb3N0MTAuQi5kcmlmdC5vdXRjb21lcyRncmVlbi5vdXRjb21lW2Nvc3QxMC5CLmRyaWZ0Lm91dGNvbWVzJGUudmFyICVpbiUgYmx1ZTJncmVlbigxMClbMTo1XV0gPC0gRkFMU0UKY29zdDEwLkIuZHJpZnQub3V0Y29tZXMkZ3JlZW4ub3V0Y29tZVtjb3N0MTAuQi5kcmlmdC5vdXRjb21lcyRlLnZhciAlaW4lIGJsdWUyZ3JlZW4oMTApWzY6MTBdXSA8LSBUUlVFCmBgYAoKYGBge3J9CmxpYnJhcnkoc2pQbG90KQpjb3N0MTAubW9kZWwgPC0gZ2xtKGdyZWVuLm91dGNvbWV+QiwgZGF0YT1jb3N0MTAuQi5kcmlmdC5vdXRjb21lcywgZmFtaWx5PSJiaW5vbWlhbCIpCnN1bW1hcnkoY29zdDEwLm1vZGVsKQpgYGAKCmBgYHtyfQpwbG90X21vZGVsKGNvc3QxMC5tb2RlbCwgc2hvdy52YWx1ZXMgPSBUUlVFLCB2YWx1ZS5vZmZzZXQ9LjMsIHRpdGxlPSJPZGRzIHJhdGlvcyBmb3IgZ3JlZW4gb3V0Y29tZSIpCmBgYApgYGB7cn0KI2RldGVybWluaW5nIGxpa2VsaWhvb2Qgb2YgYW55IHRyYWl0IGdvaW5nIGludG8gZml4YXRpb24gYnkgZ2VuZXJhdGlvbiAyMDAKCmNvc3QxMC5CLmRyaWZ0Lm91dGNvbWVzJGFueS5vdXRjb21lIDwtIE5BCmNvc3QxMC5CLmRyaWZ0Lm91dGNvbWVzJGFueS5vdXRjb21lW2lzLm5hKGNvc3QxMC5CLmRyaWZ0Lm91dGNvbWVzJGUpXSA8LSBGQUxTRQpjb3N0MTAuQi5kcmlmdC5vdXRjb21lcyRhbnkub3V0Y29tZVshaXMubmEoY29zdDEwLkIuZHJpZnQub3V0Y29tZXMkZSldIDwtIFRSVUUKYGBgCgpgYGB7cn0KI2NyZWF0ZSBtb2RlbCBhbmQgcGxvdAoKY29zdDEwLm1vZGVsLmIgPC0gZ2xtKGFueS5vdXRjb21lfkIsIGRhdGE9Y29zdDEwLkIuZHJpZnQub3V0Y29tZXMsIGZhbWlseT0iYmlub21pYWwiKQpzdW1tYXJ5KGNvc3QxMC5tb2RlbC5iKQpwbG90X21vZGVsKGNvc3QxMC5tb2RlbC5iLCBzaG93LnZhbHVlcyA9IFRSVUUsIHZhbHVlLm9mZnNldD0uMywgdGl0bGU9Ik9kZHMgcmF0aW9zIGZvciBhbnkgb3V0Y29tZSIpCmBgYApgYGB7cn0KI0IuMjUKCmNvc3QwLkIuMjUuYXZnIDwtIHRyYWl0LmF2ZyhzMS5uZXcuQi4yNS5jb3N0MFtbMV1dKQpjb3N0MTAuQi4yNS5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjI1LmNvc3QxMFtbMV1dKQpjb3N0MjAuQi4yNS5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjI1LmNvc3QyMFtbMV1dKQpjb3N0MzAuQi4yNS5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjI1LmNvc3QzMFtbMV1dKQpjb3N0NDAuQi4yNS5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjI1LmNvc3Q0MFtbMV1dKQpjb3N0NTAuQi4yNS5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjI1LmNvc3Q1MFtbMV1dKQpjb3N0NjAuQi4yNS5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjI1LmNvc3Q2MFtbMV1dKQpjb3N0NzAuQi4yNS5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjI1LmNvc3Q3MFtbMV1dKQpjb3N0ODAuQi4yNS5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjI1LmNvc3Q4MFtbMV1dKQpjb3N0OTAuQi4yNS5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjI1LmNvc3Q5MFtbMV1dKQpjb3N0MTAwLkIuMjUuYXZnIDwtIHRyYWl0LmF2ZyhzMS5uZXcuQi4yNS5jb3N0MTAwW1sxXV0pCmBgYAoKYGBge3J9CiNncm91cCAKCkIuMjUuYXZlcmFnZXMgPC0gcmJpbmQoY29zdDAuQi4yNS5hdmcsIGNvc3QxMC5CLjI1LmF2ZywgY29zdDIwLkIuMjUuYXZnLCBjb3N0MzAuQi4yNS5hdmcsIGNvc3Q0MC5CLjI1LmF2ZywgY29zdDUwLkIuMjUuYXZnLCBjb3N0NjAuQi4yNS5hdmcsIGNvc3Q3MC5CLjI1LmF2ZywgY29zdDgwLkIuMjUuYXZnLCBjb3N0OTAuQi4yNS5hdmcsIGNvc3QxMDAuQi4yNS5hdmcpCmBgYAoKYGBge3J9CkIuMjUuYXZlcmFnZXMkY29zdCA8LSBOQQpCLjI1LmF2ZXJhZ2VzJGNvc3QgPC0gcmVwKHNlcSgwLDEwMCwxMCksIGVhY2g9MjAwMCkKYGBgCgpgYGB7cn0KbGlicmFyeShnZ3Bsb3QyKQpnZ3Bsb3QoZGF0YT1zdWJzZXQoQi4yNS5hdmVyYWdlcywgZ2VuZXJhdGlvbj09MjAwKSwgYWVzKHg9Y29zdCx5PUZyZXEsIGNvbG9yPVZhcjIpKSsKZ2VvbV9saW5lKCkrCnNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9dW5pcXVlKEIuMjUuYXZlcmFnZXMkVmFyMikpK2xhYnMoeT0iZnJlcXVlbmN5IikrdGhlbWVfYncoKSt0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQpgYGAKYGBge3J9CkIuMjUuY29zdC5kcmlmdC5vdXRjb21lcyA8LSByYmluZChkcmlmdDUwMDBbWzJdXSwgczEubmV3LkIuMjUuY29zdDBbWzJdXSwgczEubmV3LkIuMjUuY29zdDEwW1syXV0sIHMxLm5ldy5CLjI1LmNvc3QyMFtbMl1dLCBzMS5uZXcuQi4yNS5jb3N0MzBbWzJdXSwgczEubmV3LkIuMjUuY29zdDQwW1syXV0sIHMxLm5ldy5CLjI1LmNvc3Q1MFtbMl1dLCBzMS5uZXcuQi4yNS5jb3N0NjBbWzJdXSwgczEubmV3LkIuMjUuY29zdDcwW1syXV0sIHMxLm5ldy5CLjI1LmNvc3Q4MFtbMl1dLCBzMS5uZXcuQi4yNS5jb3N0OTBbWzJdXSwgczEubmV3LkIuMjUuY29zdDEwMFtbMl1dKQpgYGAKCmBgYHtyfQpCLjI1LmNvc3QuZHJpZnQub3V0Y29tZXMkY29zdCA8LSBOQQpCLjI1LmNvc3QuZHJpZnQub3V0Y29tZXMkY29zdFsxOjUwMDBdIDwtICJkcmlmdCIKQi4yNS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGNvc3RbNTAwMToxMDUwMF0gPC0gcmVwKHNlcSgwLDEwMCwxMCksIGVhY2g9NTAwKQpCLjI1LmNvc3QuZHJpZnQub3V0Y29tZXMkY29zdCA8LSBmYWN0b3IoQi4yNS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGNvc3QsIGxldmVscz1jKCJkcmlmdCIsIjAiLCIxMCIsIjIwIiwiMzAiLCI0MCIsIjUwIiwiNjAiLCI3MCIsIjgwIiwiOTAiLCIxMDAiKSkKYGBgCgpgYGB7cn0KbGlicmFyeShjb2xvclJhbXBzKQpCLjI1LmNvc3QuZHJpZnQub3V0Y29tZXMkZ3JlZW4ub3V0Y29tZSA8LSBOQQpCLjI1LmNvc3QuZHJpZnQub3V0Y29tZXMkZ3JlZW4ub3V0Y29tZVtCLjI1LmNvc3QuZHJpZnQub3V0Y29tZXMkZS52YXIgJWluJSBibHVlMmdyZWVuKDEwKVsxOjVdXSA8LSBGQUxTRQpCLjI1LmNvc3QuZHJpZnQub3V0Y29tZXMkZ3JlZW4ub3V0Y29tZVtCLjI1LmNvc3QuZHJpZnQub3V0Y29tZXMkZS52YXIgJWluJSBibHVlMmdyZWVuKDEwKVs2OjEwXV0gPC0gVFJVRQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHNqUGxvdCkKQi4yNS5tb2RlbCA8LSBnbG0oZ3JlZW4ub3V0Y29tZX5jb3N0LCBkYXRhPUIuMjUuY29zdC5kcmlmdC5vdXRjb21lcywgZmFtaWx5PSJiaW5vbWlhbCIpCnN1bW1hcnkoQi4yNS5tb2RlbCkKcGxvdF9tb2RlbChCLjI1Lm1vZGVsLCBzaG93LnZhbHVlcyA9IFRSVUUsIHZhbHVlLm9mZnNldD0uMywgdGl0bGU9Ik9kZHMgcmF0aW9zIGZvciBncmVlbiBvdXRjb21lIikKYGBgCgpgYGB7cn0KI2RldGVybWluaW5nIGxpa2VsaWhvb2Qgb2YgYW55IHRyYWl0IGdvaW5nIGludG8gZml4YXRpb24gYnkgZ2VuZXJhdGlvbiAyMDAKCkIuMjUuY29zdC5kcmlmdC5vdXRjb21lcyRhbnkub3V0Y29tZSA8LSBOQQpCLjI1LmNvc3QuZHJpZnQub3V0Y29tZXMkYW55Lm91dGNvbWVbaXMubmEoQi4yNS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGUpXSA8LSBGQUxTRQpCLjI1LmNvc3QuZHJpZnQub3V0Y29tZXMkYW55Lm91dGNvbWVbIWlzLm5hKEIuMjUuY29zdC5kcmlmdC5vdXRjb21lcyRlKV0gPC0gVFJVRQoKI2NyZWF0ZSBtb2RlbCBhbmQgcGxvdAoKQi4yNS5tb2RlbC5iIDwtIGdsbShhbnkub3V0Y29tZX5jb3N0LCBkYXRhPUIuMjUuY29zdC5kcmlmdC5vdXRjb21lcywgZmFtaWx5PSJiaW5vbWlhbCIpCnN1bW1hcnkoQi4yNS5tb2RlbC5iKQpwbG90X21vZGVsKEIuMjUubW9kZWwuYiwgc2hvdy52YWx1ZXMgPSBUUlVFLCB2YWx1ZS5vZmZzZXQ9LjMsIHRpdGxlPSJPZGRzIHJhdGlvcyBmb3IgYW55IG91dGNvbWUiKQpgYGAKCmBgYHtyfQojQi42Cgpjb3N0MC5CLjYuYXZnIDwtIHRyYWl0LmF2ZyhzMS5uZXcuQi42LmNvc3QwW1sxXV0pCmNvc3QxMC5CLjYuYXZnIDwtIHRyYWl0LmF2ZyhzMS5uZXcuQi42LmNvc3QxMFtbMV1dKQpjb3N0MjAuQi42LmF2ZyA8LSB0cmFpdC5hdmcoczEubmV3LkIuNi5jb3N0MjBbWzFdXSkKY29zdDMwLkIuNi5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjYuY29zdDMwW1sxXV0pCmNvc3Q0MC5CLjYuYXZnIDwtIHRyYWl0LmF2ZyhzMS5uZXcuQi42LmNvc3Q0MFtbMV1dKQpjb3N0NTAuQi42LmF2ZyA8LSB0cmFpdC5hdmcoczEubmV3LkIuNi5jb3N0NTBbWzFdXSkKY29zdDYwLkIuNi5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjYuY29zdDYwW1sxXV0pCmNvc3Q3MC5CLjYuYXZnIDwtIHRyYWl0LmF2ZyhzMS5uZXcuQi42LmNvc3Q3MFtbMV1dKQpjb3N0ODAuQi42LmF2ZyA8LSB0cmFpdC5hdmcoczEubmV3LkIuNi5jb3N0ODBbWzFdXSkKY29zdDkwLkIuNi5hdmcgPC0gdHJhaXQuYXZnKHMxLm5ldy5CLjYuY29zdDkwW1sxXV0pCmNvc3QxMDAuQi42LmF2ZyA8LSB0cmFpdC5hdmcoczEubmV3LkIuNi5jb3N0MTAwW1sxXV0pCmBgYAoKYGBge3J9CiNncm91cCAKCkIuNi5hdmVyYWdlcyA8LSByYmluZChjb3N0MC5CLjYuYXZnLCBjb3N0MTAuQi42LmF2ZywgY29zdDIwLkIuNi5hdmcsIGNvc3QzMC5CLjYuYXZnLCBjb3N0NDAuQi42LmF2ZywgY29zdDUwLkIuNi5hdmcsIGNvc3Q2MC5CLjYuYXZnLCBjb3N0NzAuQi42LmF2ZywgY29zdDgwLkIuNi5hdmcsIGNvc3Q5MC5CLjYuYXZnLCBjb3N0MTAwLkIuNi5hdmcpCmBgYAoKYGBge3J9CkIuNi5hdmVyYWdlcyRjb3N0IDwtIE5BCkIuNi5hdmVyYWdlcyRjb3N0IDwtIHJlcChzZXEoMCwxMDAsMTApLCBlYWNoPTIwMDApCmBgYAoKYGBge3J9CmxpYnJhcnkoZ2dwbG90MikKZ2dwbG90KGRhdGE9c3Vic2V0KEIuNi5hdmVyYWdlcywgZ2VuZXJhdGlvbj09MjAwKSwgYWVzKHg9Y29zdCx5PUZyZXEsIGNvbG9yPVZhcjIpKSsKZ2VvbV9saW5lKCkrCnNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9dW5pcXVlKEIuNi5hdmVyYWdlcyRWYXIyKSkrbGFicyh5PSJmcmVxdWVuY3kiKSt0aGVtZV9idygpK3RoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpCmBgYAoKYGBge3J9CkIuNi5jb3N0LmRyaWZ0Lm91dGNvbWVzIDwtIHJiaW5kKGRyaWZ0NTAwMFtbMl1dLCBzMS5uZXcuQi42LmNvc3QwW1syXV0sIHMxLm5ldy5CLjYuY29zdDEwW1syXV0sIHMxLm5ldy5CLjYuY29zdDIwW1syXV0sIHMxLm5ldy5CLjYuY29zdDMwW1syXV0sIHMxLm5ldy5CLjYuY29zdDQwW1syXV0sIHMxLm5ldy5CLjYuY29zdDUwW1syXV0sIHMxLm5ldy5CLjYuY29zdDYwW1syXV0sIHMxLm5ldy5CLjYuY29zdDcwW1syXV0sIHMxLm5ldy5CLjYuY29zdDgwW1syXV0sIHMxLm5ldy5CLjYuY29zdDkwW1syXV0sIHMxLm5ldy5CLjYuY29zdDEwMFtbMl1dKQpgYGAKCmBgYHtyfQpCLjYuY29zdC5kcmlmdC5vdXRjb21lcyRjb3N0IDwtIE5BCkIuNi5jb3N0LmRyaWZ0Lm91dGNvbWVzJGNvc3RbMTo1MDAwXSA8LSAiZHJpZnQiCkIuNi5jb3N0LmRyaWZ0Lm91dGNvbWVzJGNvc3RbNTAwMToxMDUwMF0gPC0gcmVwKHNlcSgwLDEwMCwxMCksIGVhY2g9NTAwKQpCLjYuY29zdC5kcmlmdC5vdXRjb21lcyRjb3N0IDwtIGZhY3RvcihCLjYuY29zdC5kcmlmdC5vdXRjb21lcyRjb3N0LCBsZXZlbHM9YygiZHJpZnQiLCIwIiwiMTAiLCIyMCIsIjMwIiwiNDAiLCI1MCIsIjYwIiwiNzAiLCI4MCIsIjkwIiwiMTAwIikpCmBgYAoKYGBge3J9CmxpYnJhcnkoY29sb3JSYW1wcykKQi42LmNvc3QuZHJpZnQub3V0Y29tZXMkZ3JlZW4ub3V0Y29tZSA8LSBOQQpCLjYuY29zdC5kcmlmdC5vdXRjb21lcyRncmVlbi5vdXRjb21lW0IuNi5jb3N0LmRyaWZ0Lm91dGNvbWVzJGUudmFyICVpbiUgYmx1ZTJncmVlbigxMClbMTo1XV0gPC0gRkFMU0UKQi42LmNvc3QuZHJpZnQub3V0Y29tZXMkZ3JlZW4ub3V0Y29tZVtCLjYuY29zdC5kcmlmdC5vdXRjb21lcyRlLnZhciAlaW4lIGJsdWUyZ3JlZW4oMTApWzY6MTBdXSA8LSBUUlVFCmBgYAoKYGBge3J9CmxpYnJhcnkoc2pQbG90KQpCLjYubW9kZWwgPC0gZ2xtKGdyZWVuLm91dGNvbWV+Y29zdCwgZGF0YT1CLjYuY29zdC5kcmlmdC5vdXRjb21lcywgZmFtaWx5PSJiaW5vbWlhbCIpCnN1bW1hcnkoQi42Lm1vZGVsKQpwbG90X21vZGVsKEIuNi5tb2RlbCwgc2hvdy52YWx1ZXMgPSBUUlVFLCB2YWx1ZS5vZmZzZXQ9LjMsIHRpdGxlPSJPZGRzIHJhdGlvcyBmb3IgZ3JlZW4gb3V0Y29tZSIpCmBgYAoKYGBge3J9CiNkZXRlcm1pbmluZyBsaWtlbGlob29kIG9mIGFueSB0cmFpdCBnb2luZyBpbnRvIGZpeGF0aW9uIGJ5IGdlbmVyYXRpb24gMjAwCgpCLjYuY29zdC5kcmlmdC5vdXRjb21lcyRhbnkub3V0Y29tZSA8LSBOQQpCLjYuY29zdC5kcmlmdC5vdXRjb21lcyRhbnkub3V0Y29tZVtpcy5uYShCLjYuY29zdC5kcmlmdC5vdXRjb21lcyRlKV0gPC0gRkFMU0UKQi42LmNvc3QuZHJpZnQub3V0Y29tZXMkYW55Lm91dGNvbWVbIWlzLm5hKEIuNi5jb3N0LmRyaWZ0Lm91dGNvbWVzJGUpXSA8LSBUUlVFCgojY3JlYXRlIG1vZGVsIGFuZCBwbG90CgpCLjYubW9kZWwuYiA8LSBnbG0oYW55Lm91dGNvbWV+Y29zdCwgZGF0YT1CLjYuY29zdC5kcmlmdC5vdXRjb21lcywgZmFtaWx5PSJiaW5vbWlhbCIpCnN1bW1hcnkoQi42Lm1vZGVsLmIpCnBsb3RfbW9kZWwoQi42Lm1vZGVsLmIsIHNob3cudmFsdWVzID0gVFJVRSwgdmFsdWUub2Zmc2V0PS4zLCB0aXRsZT0iT2RkcyByYXRpb3MgZm9yIGFueSBvdXRjb21lIikKYGBgCmBgYHtyfQojZXh0cmFjdCBvZGRzIHJhdGlvcyBhbmQgY29uZmlkZW5jZSBpbnRlcnZhbHMgZnJvbSA1IG1vZGVscyDigJQgdmFyeWluZyBCIGFuZCBob2xkaW5nIGNvc3QgYXQgMTAKCkIubW9kZWwxLm91dHB1dHMgPC0gZGF0YS5mcmFtZShtb2RlbCA9IHJlcChOQSwgMTEpLCBjb3N0ID0gcmVwKDEwLDExKSwgQiA9IHNlcSgwLDEsMC4xKSwgT1IgPSBleHAoY29zdDEwLm1vZGVsJGNvZWZmaWNpZW50cylbLTFdLCBsb3cgPSBleHAoY29uZmludChjb3N0MTAubW9kZWwpKVstMSwxXSwgaGlnaCA9IGV4cChjb25maW50KGNvc3QxMC5tb2RlbCkpWy0xLDJdKQoKQi5tb2RlbDIub3V0cHV0cyA8LSBkYXRhLmZyYW1lKG1vZGVsID0gcmVwKE5BLCAxMSksIGNvc3QgPSByZXAoMTAsMTEpLCBCID0gc2VxKDAsMSwwLjEpLCBPUiA9IGV4cChzMi5jb3N0MTAubW9kZWwkY29lZmZpY2llbnRzKVstMV0sIGxvdyA9IGV4cChjb25maW50KHMyLmNvc3QxMC5tb2RlbCkpWy0xLDFdLCBoaWdoID0gZXhwKGNvbmZpbnQoczIuY29zdDEwLm1vZGVsKSlbLTEsMl0pCgpCLm1vZGVsMy5vdXRwdXRzIDwtIGRhdGEuZnJhbWUobW9kZWwgPSByZXAoTkEsIDExKSwgY29zdCA9IHJlcCgxMCwxMSksIEIgPSBzZXEoMCwxLDAuMSksIE9SID0gZXhwKHMzLmNvc3QubW9kZWwkY29lZmZpY2llbnRzKVstMV0sIGxvdyA9IGV4cChjb25maW50KHMzLmNvc3QubW9kZWwpKVstMSwxXSwgaGlnaCA9IGV4cChjb25maW50KHMzLmNvc3QubW9kZWwpKVstMSwyXSkKCkIubW9kZWw0Lm91dHB1dHMgPC0gZGF0YS5mcmFtZShtb2RlbCA9IHJlcChOQSwgMTEpLCBjb3N0ID0gcmVwKDEwLDExKSwgQiA9IHNlcSgwLDEsMC4xKSwgT1IgPSBleHAoczQuY29zdC5tb2RlbCRjb2VmZmljaWVudHMpWy0xXSwgbG93ID0gZXhwKGNvbmZpbnQoczQuY29zdC5tb2RlbCkpWy0xLDFdLCBoaWdoID0gZXhwKGNvbmZpbnQoczQuY29zdC5tb2RlbCkpWy0xLDJdKQoKQi5tb2RlbDUub3V0cHV0cyA8LSBkYXRhLmZyYW1lKG1vZGVsID0gcmVwKE5BLCAxMSksIGNvc3QgPSByZXAoMTAsMTEpLCBCID0gc2VxKDAsMSwwLjEpLCBPUiA9IGV4cChzNS5jb3N0Lm1vZGVsJGNvZWZmaWNpZW50cylbLTFdLCBsb3cgPSBleHAoY29uZmludChzNS5jb3N0Lm1vZGVsKSlbLTEsMV0sIGhpZ2ggPSBleHAoY29uZmludChzNS5jb3N0Lm1vZGVsKSlbLTEsMl0pCgpCLm1vZGVsLm91dHB1dHMgPC0gcmJpbmQoQi5tb2RlbDEub3V0cHV0cywgQi5tb2RlbDIub3V0cHV0cywgQi5tb2RlbDMub3V0cHV0cywgQi5tb2RlbDQub3V0cHV0cywgQi5tb2RlbDUub3V0cHV0cykKCkIubW9kZWwub3V0cHV0cyRtb2RlbFsxOjExXSA8LSAiTW9kZWwgMSIKQi5tb2RlbC5vdXRwdXRzJG1vZGVsWzEyOjIyXSA8LSAiTW9kZWwgMiIKQi5tb2RlbC5vdXRwdXRzJG1vZGVsWzIzOjMzXSA8LSAiTW9kZWwgMyIKQi5tb2RlbC5vdXRwdXRzJG1vZGVsWzM0OjQ0XSA8LSAiTW9kZWwgNCIKQi5tb2RlbC5vdXRwdXRzJG1vZGVsWzQ1OjU1XSA8LSAiTW9kZWwgNSIKQi5tb2RlbC5vdXRwdXRzJG1vZGVsIDwtIGZhY3RvcihCLm1vZGVsLm91dHB1dHMkbW9kZWwpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhID0gQi5tb2RlbC5vdXRwdXRzLCBhZXMoeCA9IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKEIpKSwgeSA9IE9SLCBjb2xvciA9IG1vZGVsKSkrCmdlb21fbGluZSgpKwpnZW9tX3BvaW50KHNpemUgPSAxKSsKZ2VvbV9yaWJib24oYWVzKHkgPSBPUiwgeW1pbiA9IGxvdywgeW1heCA9IGhpZ2gpLCBhbHBoYSA9IDAuMikrCnNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YyhibHVlMmdyZWVuKDUpKSkrCmdlb21faGxpbmUoeWludGVyY2VwdD0xLCBsaW5ldHlwZT0iZGFzaGVkIiwgY29sb3IgPSAicmVkIikrCnlsaW0oMCwgMTExKSsKeWxhYigiT2RkcyByYXRpb3MgZm9yIGEgZ3JlZW4gb3V0Y29tZSIpKwp4bGFiKCJWYWx1ZSBvZiBCIikrCnNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMC4xKSkgCmBgYApgYGB7cn0KZ2dwbG90KGRhdGEgPSBCLm1vZGVsLm91dHB1dHMsIGFlcyh4ID0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoQikpLCB5ID0gT1IsIGNvbG9yID0gbW9kZWwpKSsKZ2VvbV9saW5lKCkrCmdlb21fcG9pbnQoc2l6ZSA9IDEpKwpzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoYmx1ZTJncmVlbig1KSkpKwpnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9MSwgbGluZXR5cGU9ImRhc2hlZCIsIGNvbG9yID0gInJlZCIpKwp5bGltKDAsIDExMSkrCnlsYWIoIk9kZHMgcmF0aW9zIGZvciBhIGdyZWVuIG91dGNvbWUiKSsKeGxhYigiVmFsdWUgb2YgQiIpKwpzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEsIDAuMSkpIApgYGAKYGBge3J9CmdncGxvdChkYXRhID0gQi5tb2RlbC5vdXRwdXRzWy1jKHdoaWNoKEIubW9kZWwub3V0cHV0cyRCID09IDApLCB3aGljaChCLm1vZGVsLm91dHB1dHMkQiA9PSAwLjEpLCB3aGljaChCLm1vZGVsLm91dHB1dHMkQiA9PSAwLjIpLCB3aGljaChCLm1vZGVsLm91dHB1dHMkQiA9PSAwLjMpKSxdLCBhZXMoeCA9IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKEIpKSwgeSA9IE9SLCBjb2xvciA9IG1vZGVsLCBmaWxsID0gbW9kZWwpKSsKZ2VvbV9saW5lKCkrCmdlb21fcG9pbnQoc2l6ZSA9IDEuMikrCnNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YyhibHVlMmdyZWVuKDUpKSkrCmdlb21faGxpbmUoeWludGVyY2VwdD0xLCBsaW5ldHlwZT0iZGFzaGVkIiwgY29sb3IgPSAicmVkIikrCmdlb21fcmliYm9uKGFlcyh5ID0gT1IsIHltaW4gPSBsb3csIHltYXggPSBoaWdoKSwgYWxwaGEgPSAwLjIpKwp5bGFiKCJPZGRzIHJhdGlvcyBmb3IgYSBncmVlbiBvdXRjb21lIikrCnhsYWIoIlZhbHVlIG9mIEIiKSsKc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLjQsIDEsIDAuMSkpIApgYGAKYGBge3J9CmdncGxvdChkYXRhID0gQi5tb2RlbC5vdXRwdXRzW2Mod2hpY2goQi5tb2RlbC5vdXRwdXRzJEIgPT0gMCksIHdoaWNoKEIubW9kZWwub3V0cHV0cyRCID09IDAuMSksIHdoaWNoKEIubW9kZWwub3V0cHV0cyRCID09IDAuMiksIHdoaWNoKEIubW9kZWwub3V0cHV0cyRCID09IDAuMykpLF0sIGFlcyh4ID0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoQikpLCB5ID0gT1IsIGNvbG9yID0gbW9kZWwsIGZpbGwgPSBtb2RlbCkpKwpnZW9tX2xpbmUoKSsKZ2VvbV9wb2ludChzaXplID0gMS4yKSsKc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKGJsdWUyZ3JlZW4oNSkpKSsKZ2VvbV9obGluZSh5aW50ZXJjZXB0PTEsIGxpbmV0eXBlPSJkYXNoZWQiLCBjb2xvciA9ICJyZWQiKSsKZ2VvbV9yaWJib24oYWVzKHkgPSBPUiwgeW1pbiA9IGxvdywgeW1heCA9IGhpZ2gpLCBhbHBoYSA9IDAuMikrCnlsYWIoIk9kZHMgcmF0aW9zIGZvciBhIGdyZWVuIG91dGNvbWUiKSsKeGxhYigiVmFsdWUgb2YgQiIpKwp5bGltKDAsMTApKwpzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDAuNCwgMC4xKSkgCmBgYApgYGB7cn0KI2V4dHJhY3Qgb2RkcyByYXRpb3MgYW5kIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGZyb20gNSBtb2RlbHMg4oCUIHZhcnlpbmcgY29zdCBhbmQgaG9sZGluZyBCIGF0IDAuNiAoMC43IGFuZCAwLjggaW4gbW9kZWxzIDIgYW5kIDUsIHJlc3BlY3RpdmVseSkKCmNvc3QubW9kZWwxLm91dHB1dHMgPC0gZGF0YS5mcmFtZShtb2RlbCA9IHJlcChOQSwgMTEpLCBCID0gcmVwKDAuNiwxMSksIGNvc3QgPSBzZXEoMCwxMDAsMTApLCBPUiA9IGV4cChCLjYubW9kZWwkY29lZmZpY2llbnRzKVstMV0sIGxvdyA9IGV4cChjb25maW50KEIuNi5tb2RlbCkpWy0xLDFdLCBoaWdoID0gZXhwKGNvbmZpbnQoQi42Lm1vZGVsKSlbLTEsMl0pCgpjb3N0Lm1vZGVsMi5vdXRwdXRzIDwtIGRhdGEuZnJhbWUobW9kZWwgPSByZXAoTkEsIDExKSwgQiA9IHJlcCgwLjcsMTEpLCBjb3N0ID0gc2VxKDAsMTAwLDEwKSwgT1IgPSBleHAoczIuQi43Lm1vZGVsJGNvZWZmaWNpZW50cylbLTFdLCBsb3cgPSBleHAoY29uZmludChzMi5CLjcubW9kZWwpKVstMSwxXSwgaGlnaCA9IGV4cChjb25maW50KHMyLkIuNy5tb2RlbCkpWy0xLDJdKQoKY29zdC5tb2RlbDMub3V0cHV0cyA8LSBkYXRhLmZyYW1lKG1vZGVsID0gcmVwKE5BLCAxMSksIEIgPSByZXAoMC42LDExKSwgY29zdCA9IHNlcSgwLDEwMCwxMCksIE9SID0gZXhwKHMzLkIuNi5tb2RlbCRjb2VmZmljaWVudHMpWy0xXSwgbG93ID0gZXhwKGNvbmZpbnQoczMuQi42Lm1vZGVsKSlbLTEsMV0sIGhpZ2ggPSBleHAoY29uZmludChzMy5CLjYubW9kZWwpKVstMSwyXSkKCmNvc3QubW9kZWw0Lm91dHB1dHMgPC0gZGF0YS5mcmFtZShtb2RlbCA9IHJlcChOQSwgMTEpLCBCID0gcmVwKDAuNiwxMSksIGNvc3QgPSBzZXEoMCwxMDAsMTApLCBPUiA9IGV4cChzNC5CLjYubW9kZWwkY29lZmZpY2llbnRzKVstMV0sIGxvdyA9IGV4cChjb25maW50KHM0LkIuNi5tb2RlbCkpWy0xLDFdLCBoaWdoID0gZXhwKGNvbmZpbnQoczQuQi42Lm1vZGVsKSlbLTEsMl0pCgpjb3N0Lm1vZGVsNS5vdXRwdXRzIDwtIGRhdGEuZnJhbWUobW9kZWwgPSByZXAoTkEsIDExKSwgQiA9IHJlcCgwLjgsMTEpLCBjb3N0ID0gc2VxKDAsMTAwLDEwKSwgT1IgPSBleHAoczUuQi44Lm1vZGVsJGNvZWZmaWNpZW50cylbLTFdLCBsb3cgPSBleHAoY29uZmludChzNS5CLjgubW9kZWwpKVstMSwxXSwgaGlnaCA9IGV4cChjb25maW50KHM1LkIuOC5tb2RlbCkpWy0xLDJdKQoKY29zdC5tb2RlbC5vdXRwdXRzIDwtIHJiaW5kKGNvc3QubW9kZWwxLm91dHB1dHMsIGNvc3QubW9kZWwyLm91dHB1dHMsIGNvc3QubW9kZWwzLm91dHB1dHMsIGNvc3QubW9kZWw0Lm91dHB1dHMsIGNvc3QubW9kZWw1Lm91dHB1dHMpCgpjb3N0Lm1vZGVsLm91dHB1dHMkbW9kZWxbMToxMV0gPC0gIk1vZGVsIDEiCmNvc3QubW9kZWwub3V0cHV0cyRtb2RlbFsxMjoyMl0gPC0gIk1vZGVsIDIiCmNvc3QubW9kZWwub3V0cHV0cyRtb2RlbFsyMzozM10gPC0gIk1vZGVsIDMiCmNvc3QubW9kZWwub3V0cHV0cyRtb2RlbFszNDo0NF0gPC0gIk1vZGVsIDQiCmNvc3QubW9kZWwub3V0cHV0cyRtb2RlbFs0NTo1NV0gPC0gIk1vZGVsIDUiCmNvc3QubW9kZWwub3V0cHV0cyRtb2RlbCA8LSBmYWN0b3IoQi5tb2RlbC5vdXRwdXRzJG1vZGVsKQpgYGAKYGBge3J9CmdncGxvdChkYXRhID0gY29zdC5tb2RlbC5vdXRwdXRzLCBhZXMoeCA9IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKGNvc3QpKSwgeSA9IE9SLCBjb2xvciA9IG1vZGVsKSkrCmdlb21fbGluZSgpKwpnZW9tX3BvaW50KHNpemUgPSAxKSsKZ2VvbV9yaWJib24oYWVzKHkgPSBPUiwgeW1pbiA9IGxvdywgeW1heCA9IGhpZ2gsIGZpbGw9bW9kZWwpLCBhbHBoYSA9IDAuMikrCnNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YyhibHVlMmdyZWVuKDUpKSkrCmdlb21faGxpbmUoeWludGVyY2VwdD0xLCBsaW5ldHlwZT0iZGFzaGVkIiwgY29sb3IgPSAicmVkIikrCnlsaW0oMCwgMi41KSsKeWxhYigiT2RkcyByYXRpb3MgZm9yIGEgZ3JlZW4gb3V0Y29tZSIpKwp4bGFiKCJWYWx1ZSBvZiBjb3N0IikrCnNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTAwLCAxMCkpIApgYGAKCmBgYHtyfQpCMC5jb3N0LmRyaWZ0Lm91dGNvbWVzIDwtIHJiaW5kKGRyaWZ0NTAwMFtbMl1dLCBzMS5uZXcuQjAuY29zdDBbWzJdXSwgczEubmV3LkIwLmNvc3QxMFtbMl1dLCBzMS5uZXcuQjAuY29zdDIwW1syXV0sIHMxLm5ldy5CMC5jb3N0MzBbWzJdXSwgczEubmV3LkIwLmNvc3Q0MFtbMl1dLCBzMS5uZXcuQjAuY29zdDUwW1syXV0sIHMxLm5ldy5CMC5jb3N0NjBbWzJdXSwgczEubmV3LkIwLmNvc3Q3MFtbMl1dLCBzMS5uZXcuQjAuY29zdDgwW1syXV0sIHMxLm5ldy5CMC5jb3N0OTBbWzJdXSwgczEubmV3LkIwLmNvc3QxMDBbWzJdXSkKYGBgCgpgYGB7cn0KQjAuY29zdC5kcmlmdC5vdXRjb21lcyRjb3N0IDwtIE5BCkIwLmNvc3QuZHJpZnQub3V0Y29tZXMkY29zdFsxOjUwMDBdIDwtICJkcmlmdCIKQjAuY29zdC5kcmlmdC5vdXRjb21lcyRjb3N0WzUwMDE6MTA1MDBdIDwtIHJlcChzZXEoMCwxMDAsMTApLCBlYWNoPTUwMCkKQjAuY29zdC5kcmlmdC5vdXRjb21lcyRjb3N0IDwtIGZhY3RvcihCMC5jb3N0LmRyaWZ0Lm91dGNvbWVzJGNvc3QsIGxldmVscz1jKCJkcmlmdCIsIjAiLCIxMCIsIjIwIiwiMzAiLCI0MCIsIjUwIiwiNjAiLCI3MCIsIjgwIiwiOTAiLCIxMDAiKSkKYGBgCgpgYGB7cn0KbGlicmFyeShjb2xvclJhbXBzKQpCMC5jb3N0LmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWUgPC0gTkEKQjAuY29zdC5kcmlmdC5vdXRjb21lcyRncmVlbi5vdXRjb21lW0IwLmNvc3QuZHJpZnQub3V0Y29tZXMkZS52YXIgJWluJSBibHVlMmdyZWVuKDEwKVsxOjVdXSA8LSBGQUxTRQpCMC5jb3N0LmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWVbQjAuY29zdC5kcmlmdC5vdXRjb21lcyRlLnZhciAlaW4lIGJsdWUyZ3JlZW4oMTApWzY6MTBdXSA8LSBUUlVFCmBgYAoKYGBge3J9CmxpYnJhcnkoc2pQbG90KQpCMC5tb2RlbCA8LSBnbG0oZ3JlZW4ub3V0Y29tZX5jb3N0LCBkYXRhPUIwLmNvc3QuZHJpZnQub3V0Y29tZXMsIGZhbWlseT0iYmlub21pYWwiKQpzdW1tYXJ5KEIwLm1vZGVsKQpwbG90X21vZGVsKEIwLm1vZGVsLCBzaG93LnZhbHVlcyA9IFRSVUUsIHZhbHVlLm9mZnNldD0uMywgdGl0bGU9Ik9kZHMgcmF0aW9zIGZvciBncmVlbiBvdXRjb21lIikKYGBgCmBgYHtyfQpCLjc1LmNvc3QuZHJpZnQub3V0Y29tZXMgPC0gcmJpbmQoZHJpZnQ1MDAwW1syXV0sIHMxLm5ldy5CLjc1LmNvc3QwW1syXV0sIHMxLm5ldy5CLjc1LmNvc3QxMFtbMl1dLCBzMS5uZXcuQi43NS5jb3N0MjBbWzJdXSwgczEubmV3LkIuNzUuY29zdDMwW1syXV0sIHMxLm5ldy5CLjc1LmNvc3Q0MFtbMl1dLCBzMS5uZXcuQi43NS5jb3N0NTBbWzJdXSwgczEubmV3LkIuNzUuY29zdDYwW1syXV0sIHMxLm5ldy5CLjc1LmNvc3Q3MFtbMl1dLCBzMS5uZXcuQi43NS5jb3N0ODBbWzJdXSwgczEubmV3LkIuNzUuY29zdDkwW1syXV0sIHMxLm5ldy5CLjc1LmNvc3QxMDBbWzJdXSkKYGBgCgpgYGB7cn0KQi43NS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGNvc3QgPC0gTkEKQi43NS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGNvc3RbMTo1MDAwXSA8LSAiZHJpZnQiCkIuNzUuY29zdC5kcmlmdC5vdXRjb21lcyRjb3N0WzUwMDE6MTA1MDBdIDwtIHJlcChzZXEoMCwxMDAsMTApLCBlYWNoPTUwMCkKQi43NS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGNvc3QgPC0gZmFjdG9yKEIuNzUuY29zdC5kcmlmdC5vdXRjb21lcyRjb3N0LCBsZXZlbHM9YygiZHJpZnQiLCIwIiwiMTAiLCIyMCIsIjMwIiwiNDAiLCI1MCIsIjYwIiwiNzAiLCI4MCIsIjkwIiwiMTAwIikpCmBgYAoKYGBge3J9CmxpYnJhcnkoY29sb3JSYW1wcykKQi43NS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWUgPC0gTkEKQi43NS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWVbQi43NS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGUudmFyICVpbiUgYmx1ZTJncmVlbigxMClbMTo1XV0gPC0gRkFMU0UKQi43NS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWVbQi43NS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGUudmFyICVpbiUgYmx1ZTJncmVlbigxMClbNjoxMF1dIDwtIFRSVUUKYGBgCgpgYGB7cn0KbGlicmFyeShzalBsb3QpCkIuNzUubW9kZWwgPC0gZ2xtKGdyZWVuLm91dGNvbWV+Y29zdCwgZGF0YT1CLjc1LmNvc3QuZHJpZnQub3V0Y29tZXMsIGZhbWlseT0iYmlub21pYWwiKQpzdW1tYXJ5KEIuNzUubW9kZWwpCnBsb3RfbW9kZWwoQi43NS5tb2RlbCwgc2hvdy52YWx1ZXMgPSBUUlVFLCB2YWx1ZS5vZmZzZXQ9LjMsIHRpdGxlPSJPZGRzIHJhdGlvcyBmb3IgZ3JlZW4gb3V0Y29tZSIpCmBgYAoKYGBge3J9CkIxLmNvc3QuZHJpZnQub3V0Y29tZXMgPC0gcmJpbmQoZHJpZnQ1MDAwW1syXV0sIHMxLm5ldy5CMS5jb3N0MFtbMl1dLCBzMS5uZXcuQjEuY29zdDEwW1syXV0sIHMxLm5ldy5CMS5jb3N0MjBbWzJdXSwgczEubmV3LkIxLmNvc3QzMFtbMl1dLCBzMS5uZXcuQjEuY29zdDQwW1syXV0sIHMxLm5ldy5CMS5jb3N0NTBbWzJdXSwgczEubmV3LkIxLmNvc3Q2MFtbMl1dLCBzMS5uZXcuQjEuY29zdDcwW1syXV0sIHMxLm5ldy5CMS5jb3N0ODBbWzJdXSwgczEubmV3LkIxLmNvc3Q5MFtbMl1dLCBzMS5uZXcuQjEuY29zdDEwMFtbMl1dKQpgYGAKCmBgYHtyfQpCMS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGNvc3QgPC0gTkEKQjEuY29zdC5kcmlmdC5vdXRjb21lcyRjb3N0WzE6NTAwMF0gPC0gImRyaWZ0IgpCMS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGNvc3RbNTAwMToxMDUwMF0gPC0gcmVwKHNlcSgwLDEwMCwxMCksIGVhY2g9NTAwKQpCMS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGNvc3QgPC0gZmFjdG9yKEIxLmNvc3QuZHJpZnQub3V0Y29tZXMkY29zdCwgbGV2ZWxzPWMoImRyaWZ0IiwiMCIsIjEwIiwiMjAiLCIzMCIsIjQwIiwiNTAiLCI2MCIsIjcwIiwiODAiLCI5MCIsIjEwMCIpKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KGNvbG9yUmFtcHMpCkIxLmNvc3QuZHJpZnQub3V0Y29tZXMkZ3JlZW4ub3V0Y29tZSA8LSBOQQpCMS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWVbQjEuY29zdC5kcmlmdC5vdXRjb21lcyRlLnZhciAlaW4lIGJsdWUyZ3JlZW4oMTApWzE6NV1dIDwtIEZBTFNFCkIxLmNvc3QuZHJpZnQub3V0Y29tZXMkZ3JlZW4ub3V0Y29tZVtCMS5jb3N0LmRyaWZ0Lm91dGNvbWVzJGUudmFyICVpbiUgYmx1ZTJncmVlbigxMClbNjoxMF1dIDwtIFRSVUUKYGBgCgpgYGB7cn0KbGlicmFyeShzalBsb3QpCkIxLm1vZGVsIDwtIGdsbShncmVlbi5vdXRjb21lfmNvc3QsIGRhdGE9QjEuY29zdC5kcmlmdC5vdXRjb21lcywgZmFtaWx5PSJiaW5vbWlhbCIpCnN1bW1hcnkoQjEubW9kZWwpCnBsb3RfbW9kZWwoQjEubW9kZWwsIHNob3cudmFsdWVzID0gVFJVRSwgdmFsdWUub2Zmc2V0PS4zLCB0aXRsZT0iT2RkcyByYXRpb3MgZm9yIGdyZWVuIG91dGNvbWUiKQpgYGAKYGBge3J9CiNtb2RlbCAxIEIgbW9kZWwgb3V0cHV0cwoKY29zdC5tb2RlbDEuQjAub3V0cHV0cyA8LSBkYXRhLmZyYW1lKG1vZGVsID0gcmVwKE5BLCAxMSksIEIgPSByZXAoMCwxMSksIGNvc3QgPSBzZXEoMCwxMDAsMTApLCBPUiA9IGV4cChCMC5tb2RlbCRjb2VmZmljaWVudHMpWy0xXSwgbG93ID0gZXhwKGNvbmZpbnQoQjAubW9kZWwpKVstMSwxXSwgaGlnaCA9IGV4cChjb25maW50KEIwLm1vZGVsKSlbLTEsMl0pCgpjb3N0Lm1vZGVsMS5CLjI1Lm91dHB1dHMgPC0gZGF0YS5mcmFtZShtb2RlbCA9IHJlcChOQSwgMTEpLCBCID0gcmVwKDAuMjUsMTEpLCBjb3N0ID0gc2VxKDAsMTAwLDEwKSwgT1IgPSBleHAoQi4yNS5tb2RlbCRjb2VmZmljaWVudHMpWy0xXSwgbG93ID0gZXhwKGNvbmZpbnQoQi4yNS5tb2RlbCkpWy0xLDFdLCBoaWdoID0gZXhwKGNvbmZpbnQoQi4yNS5tb2RlbCkpWy0xLDJdKQoKY29zdC5tb2RlbDEuQi42Lm91dHB1dHMgPC0gZGF0YS5mcmFtZShtb2RlbCA9IHJlcChOQSwgMTEpLCBCID0gcmVwKDAuNiwxMSksIGNvc3QgPSBzZXEoMCwxMDAsMTApLCBPUiA9IGV4cChCLjYubW9kZWwkY29lZmZpY2llbnRzKVstMV0sIGxvdyA9IGV4cChjb25maW50KEIuNi5tb2RlbCkpWy0xLDFdLCBoaWdoID0gZXhwKGNvbmZpbnQoQi42Lm1vZGVsKSlbLTEsMl0pCgpjb3N0Lm1vZGVsMS5CLjc1Lm91dHB1dHMgPC0gZGF0YS5mcmFtZShtb2RlbCA9IHJlcChOQSwgMTEpLCBCID0gcmVwKDAuNzUsMTEpLCBjb3N0ID0gc2VxKDAsMTAwLDEwKSwgT1IgPSBleHAoQi43NS5tb2RlbCRjb2VmZmljaWVudHMpWy0xXSwgbG93ID0gZXhwKGNvbmZpbnQoQi43NS5tb2RlbCkpWy0xLDFdLCBoaWdoID0gZXhwKGNvbmZpbnQoQi43NS5tb2RlbCkpWy0xLDJdKQoKY29zdC5tb2RlbDEuQjEub3V0cHV0cyA8LSBkYXRhLmZyYW1lKG1vZGVsID0gcmVwKE5BLCAxMSksIEIgPSByZXAoMSwxMSksIGNvc3QgPSBzZXEoMCwxMDAsMTApLCBPUiA9IGV4cChCMS5tb2RlbCRjb2VmZmljaWVudHMpWy0xXSwgbG93ID0gZXhwKGNvbmZpbnQoQjEubW9kZWwpKVstMSwxXSwgaGlnaCA9IGV4cChjb25maW50KEIxLm1vZGVsKSlbLTEsMl0pCgpCLm1vZGVsMS5vdXRwdXRzIDwtIHJiaW5kKGNvc3QubW9kZWwxLkIwLm91dHB1dHMsIGNvc3QubW9kZWwxLkIuMjUub3V0cHV0cywgY29zdC5tb2RlbDEuQi42Lm91dHB1dHMsIGNvc3QubW9kZWwxLkIuNzUub3V0cHV0cywgY29zdC5tb2RlbDEuQjEub3V0cHV0cykKCkIubW9kZWwxLm91dHB1dHMkbW9kZWxbMToxMV0gPC0gIkIgPSAwIgpCLm1vZGVsMS5vdXRwdXRzJG1vZGVsWzEyOjIyXSA8LSAiQiA9IC4yNSIKQi5tb2RlbDEub3V0cHV0cyRtb2RlbFsyMzozM10gPC0gIkIgPSAuNiIKQi5tb2RlbDEub3V0cHV0cyRtb2RlbFszNDo0NF0gPC0gIkIgPSAuNzUiCkIubW9kZWwxLm91dHB1dHMkbW9kZWxbNDU6NTVdIDwtICJCID0gMSIKQi5tb2RlbDEub3V0cHV0cyRtb2RlbCA8LSBmYWN0b3IoQi5tb2RlbDEub3V0cHV0cyRtb2RlbCwgbGV2ZWxzPWMoIkIgPSAwIiwgIkIgPSAuMjUiLCAiQiA9IC42IiwgIkIgPSAuNzUiLCAiQiA9IDEiKSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBCLm1vZGVsMS5vdXRwdXRzLCBhZXMoeCA9IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKGNvc3QpKSwgeSA9IE9SLCBjb2xvciA9IG1vZGVsKSkrCmdlb21fbGluZSgpKwpnZW9tX3BvaW50KHNpemUgPSAxKSsKZ2VvbV9yaWJib24oYWVzKHkgPSBPUiwgeW1pbiA9IGxvdywgeW1heCA9IGhpZ2gsIGZpbGw9bW9kZWwpLCBhbHBoYSA9IDAuMikrCnNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YyhibHVlMmdyZWVuKDUpKSkrCmdlb21faGxpbmUoeWludGVyY2VwdD0xLCBsaW5ldHlwZT0iZGFzaGVkIiwgY29sb3IgPSAicmVkIikrCnlsaW0oMCwgNCkrCnlsYWIoIk9kZHMgcmF0aW9zIGZvciBhIGdyZWVuIG91dGNvbWUiKSsKeGxhYigiVmFsdWUgb2YgY29zdCIpKwpzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEwMCwgMTApKSsKdGhlbWUobGVnZW5kLnRpdGxlPWVsZW1lbnRfYmxhbmsoKSkKYGBgCmBgYHtyfQpjb3N0MC5CLmRyaWZ0Lm91dGNvbWVzIDwtIHJiaW5kKGRyaWZ0NTAwMFtbMl1dLCBzMS5uZXcuQjAuY29zdDBbWzJdXSwgczEubmV3LkIuMS5jb3N0MFtbMl1dLCBzMS5uZXcuQi4yLmNvc3QwW1syXV0sIHMxLm5ldy5CLjMuY29zdDBbWzJdXSwgczEubmV3LkIuNC5jb3N0MFtbMl1dLCBzMS5uZXcuQi41LmNvc3QwW1syXV0sIHMxLm5ldy5CLjYuY29zdDBbWzJdXSwgczEubmV3LkIuNy5jb3N0MFtbMl1dLCBzMS5uZXcuQi44LmNvc3QwW1syXV0sIHMxLm5ldy5CLjkuY29zdDBbWzJdXSwgczEubmV3LkIxLmNvc3QwW1syXV0pCmBgYAoKYGBge3J9CmNvc3QwLkIuZHJpZnQub3V0Y29tZXMkQiA8LSBOQQpjb3N0MC5CLmRyaWZ0Lm91dGNvbWVzJEJbMTo1MDAwXSA8LSAiZHJpZnQiCmNvc3QwLkIuZHJpZnQub3V0Y29tZXMkQls1MDAxOjEwNTAwXSA8LSByZXAoc2VxKDAsMSwwLjEpLCBlYWNoPTUwMCkKY29zdDAuQi5kcmlmdC5vdXRjb21lcyRCIDwtIGZhY3Rvcihjb3N0MC5CLmRyaWZ0Lm91dGNvbWVzJEIsIGxldmVscz1jKCJkcmlmdCIsIjAiLCIwLjEiLCIwLjIiLCIwLjMiLCIwLjQiLCIwLjUiLCIwLjYiLCIwLjciLCIwLjgiLCIwLjkiLCIxIikpCmBgYAoKYGBge3J9CmxpYnJhcnkoY29sb3JSYW1wcykKY29zdDAuQi5kcmlmdC5vdXRjb21lcyRncmVlbi5vdXRjb21lIDwtIE5BCmNvc3QwLkIuZHJpZnQub3V0Y29tZXMkZ3JlZW4ub3V0Y29tZVtjb3N0MC5CLmRyaWZ0Lm91dGNvbWVzJGUudmFyICVpbiUgYmx1ZTJncmVlbigxMClbMTo1XV0gPC0gRkFMU0UKY29zdDAuQi5kcmlmdC5vdXRjb21lcyRncmVlbi5vdXRjb21lW2Nvc3QwLkIuZHJpZnQub3V0Y29tZXMkZS52YXIgJWluJSBibHVlMmdyZWVuKDEwKVs2OjEwXV0gPC0gVFJVRQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHNqUGxvdCkKY29zdDAubW9kZWwgPC0gZ2xtKGdyZWVuLm91dGNvbWV+QiwgZGF0YT1jb3N0MC5CLmRyaWZ0Lm91dGNvbWVzLCBmYW1pbHk9ImJpbm9taWFsIikKc3VtbWFyeShjb3N0MC5tb2RlbCkKcGxvdF9tb2RlbChjb3N0MC5tb2RlbCwgc2hvdy52YWx1ZXMgPSBUUlVFLCB2YWx1ZS5vZmZzZXQ9LjMsIHRpdGxlPSJPZGRzIHJhdGlvcyBmb3IgZ3JlZW4gb3V0Y29tZSIpCmBgYAoKYGBge3J9CmNvc3QyNS5CLmRyaWZ0Lm91dGNvbWVzIDwtIHJiaW5kKGRyaWZ0NTAwMFtbMl1dLCBzMS5uZXcuQjAuY29zdDI1W1syXV0sIHMxLm5ldy5CLjEuY29zdDI1W1syXV0sIHMxLm5ldy5CLjIuY29zdDI1W1syXV0sIHMxLm5ldy5CLjMuY29zdDI1W1syXV0sIHMxLm5ldy5CLjQuY29zdDI1W1syXV0sIHMxLm5ldy5CLjUuY29zdDI1W1syXV0sIHMxLm5ldy5CLjYuY29zdDI1W1syXV0sIHMxLm5ldy5CLjcuY29zdDI1W1syXV0sIHMxLm5ldy5CLjguY29zdDI1W1syXV0sIHMxLm5ldy5CLjkuY29zdDI1W1syXV0sIHMxLm5ldy5CMS5jb3N0MjVbWzJdXSkKYGBgCgpgYGB7cn0KY29zdDI1LkIuZHJpZnQub3V0Y29tZXMkQiA8LSBOQQpjb3N0MjUuQi5kcmlmdC5vdXRjb21lcyRCWzE6NTAwMF0gPC0gImRyaWZ0Igpjb3N0MjUuQi5kcmlmdC5vdXRjb21lcyRCWzUwMDE6MTA1MDBdIDwtIHJlcChzZXEoMCwxLDAuMSksIGVhY2g9NTAwKQpjb3N0MjUuQi5kcmlmdC5vdXRjb21lcyRCIDwtIGZhY3Rvcihjb3N0MjUuQi5kcmlmdC5vdXRjb21lcyRCLCBsZXZlbHM9YygiZHJpZnQiLCIwIiwiMC4xIiwiMC4yIiwiMC4zIiwiMC40IiwiMC41IiwiMC42IiwiMC43IiwiMC44IiwiMC45IiwiMSIpKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KGNvbG9yUmFtcHMpCmNvc3QyNS5CLmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWUgPC0gTkEKY29zdDI1LkIuZHJpZnQub3V0Y29tZXMkZ3JlZW4ub3V0Y29tZVtjb3N0MjUuQi5kcmlmdC5vdXRjb21lcyRlLnZhciAlaW4lIGJsdWUyZ3JlZW4oMTApWzE6NV1dIDwtIEZBTFNFCmNvc3QyNS5CLmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWVbY29zdDI1LkIuZHJpZnQub3V0Y29tZXMkZS52YXIgJWluJSBibHVlMmdyZWVuKDEwKVs2OjEwXV0gPC0gVFJVRQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHNqUGxvdCkKY29zdDI1Lm1vZGVsIDwtIGdsbShncmVlbi5vdXRjb21lfkIsIGRhdGE9Y29zdDI1LkIuZHJpZnQub3V0Y29tZXMsIGZhbWlseT0iYmlub21pYWwiKQpzdW1tYXJ5KGNvc3QyNS5tb2RlbCkKcGxvdF9tb2RlbChjb3N0MjUubW9kZWwsIHNob3cudmFsdWVzID0gVFJVRSwgdmFsdWUub2Zmc2V0PS4zLCB0aXRsZT0iT2RkcyByYXRpb3MgZm9yIGdyZWVuIG91dGNvbWUiKQpgYGAKYGBge3J9CmNvc3Q1MC5CLmRyaWZ0Lm91dGNvbWVzIDwtIHJiaW5kKGRyaWZ0NTAwMFtbMl1dLCBzMS5uZXcuQjAuY29zdDUwW1syXV0sIHMxLm5ldy5CLjEuY29zdDUwW1syXV0sIHMxLm5ldy5CLjIuY29zdDUwW1syXV0sIHMxLm5ldy5CLjMuY29zdDUwW1syXV0sIHMxLm5ldy5CLjQuY29zdDUwW1syXV0sIHMxLm5ldy5CLjUuY29zdDUwW1syXV0sIHMxLm5ldy5CLjYuY29zdDUwW1syXV0sIHMxLm5ldy5CLjcuY29zdDUwW1syXV0sIHMxLm5ldy5CLjguY29zdDUwW1syXV0sIHMxLm5ldy5CLjkuY29zdDUwW1syXV0sIHMxLm5ldy5CMS5jb3N0NTBbWzJdXSkKYGBgCgpgYGB7cn0KY29zdDUwLkIuZHJpZnQub3V0Y29tZXMkQiA8LSBOQQpjb3N0NTAuQi5kcmlmdC5vdXRjb21lcyRCWzE6NTAwMF0gPC0gImRyaWZ0Igpjb3N0NTAuQi5kcmlmdC5vdXRjb21lcyRCWzUwMDE6MTA1MDBdIDwtIHJlcChzZXEoMCwxLDAuMSksIGVhY2g9NTAwKQpjb3N0NTAuQi5kcmlmdC5vdXRjb21lcyRCIDwtIGZhY3Rvcihjb3N0NTAuQi5kcmlmdC5vdXRjb21lcyRCLCBsZXZlbHM9YygiZHJpZnQiLCIwIiwiMC4xIiwiMC4yIiwiMC4zIiwiMC40IiwiMC41IiwiMC42IiwiMC43IiwiMC44IiwiMC45IiwiMSIpKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KGNvbG9yUmFtcHMpCmNvc3Q1MC5CLmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWUgPC0gTkEKY29zdDUwLkIuZHJpZnQub3V0Y29tZXMkZ3JlZW4ub3V0Y29tZVtjb3N0NTAuQi5kcmlmdC5vdXRjb21lcyRlLnZhciAlaW4lIGJsdWUyZ3JlZW4oMTApWzE6NV1dIDwtIEZBTFNFCmNvc3Q1MC5CLmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWVbY29zdDUwLkIuZHJpZnQub3V0Y29tZXMkZS52YXIgJWluJSBibHVlMmdyZWVuKDEwKVs2OjEwXV0gPC0gVFJVRQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHNqUGxvdCkKY29zdDUwLm1vZGVsIDwtIGdsbShncmVlbi5vdXRjb21lfkIsIGRhdGE9Y29zdDUwLkIuZHJpZnQub3V0Y29tZXMsIGZhbWlseT0iYmlub21pYWwiKQpzdW1tYXJ5KGNvc3Q1MC5tb2RlbCkKcGxvdF9tb2RlbChjb3N0NTAubW9kZWwsIHNob3cudmFsdWVzID0gVFJVRSwgdmFsdWUub2Zmc2V0PS4zLCB0aXRsZT0iT2RkcyByYXRpb3MgZm9yIGdyZWVuIG91dGNvbWUiKQpgYGAKYGBge3J9CmNvc3Q3NS5CLmRyaWZ0Lm91dGNvbWVzIDwtIHJiaW5kKGRyaWZ0NTAwMFtbMl1dLCBzMS5uZXcuQjAuY29zdDc1W1syXV0sIHMxLm5ldy5CLjEuY29zdDc1W1syXV0sIHMxLm5ldy5CLjIuY29zdDc1W1syXV0sIHMxLm5ldy5CLjMuY29zdDc1W1syXV0sIHMxLm5ldy5CLjQuY29zdDc1W1syXV0sIHMxLm5ldy5CLjUuY29zdDc1W1syXV0sIHMxLm5ldy5CLjYuY29zdDc1W1syXV0sIHMxLm5ldy5CLjcuY29zdDc1W1syXV0sIHMxLm5ldy5CLjguY29zdDc1W1syXV0sIHMxLm5ldy5CLjkuY29zdDc1W1syXV0sIHMxLm5ldy5CMS5jb3N0NzVbWzJdXSkKYGBgCgpgYGB7cn0KY29zdDc1LkIuZHJpZnQub3V0Y29tZXMkQiA8LSBOQQpjb3N0NzUuQi5kcmlmdC5vdXRjb21lcyRCWzE6NTAwMF0gPC0gImRyaWZ0Igpjb3N0NzUuQi5kcmlmdC5vdXRjb21lcyRCWzUwMDE6MTA1MDBdIDwtIHJlcChzZXEoMCwxLDAuMSksIGVhY2g9NTAwKQpjb3N0NzUuQi5kcmlmdC5vdXRjb21lcyRCIDwtIGZhY3Rvcihjb3N0NzUuQi5kcmlmdC5vdXRjb21lcyRCLCBsZXZlbHM9YygiZHJpZnQiLCIwIiwiMC4xIiwiMC4yIiwiMC4zIiwiMC40IiwiMC41IiwiMC42IiwiMC43IiwiMC44IiwiMC45IiwiMSIpKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KGNvbG9yUmFtcHMpCmNvc3Q3NS5CLmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWUgPC0gTkEKY29zdDc1LkIuZHJpZnQub3V0Y29tZXMkZ3JlZW4ub3V0Y29tZVtjb3N0NzUuQi5kcmlmdC5vdXRjb21lcyRlLnZhciAlaW4lIGJsdWUyZ3JlZW4oMTApWzE6NV1dIDwtIEZBTFNFCmNvc3Q3NS5CLmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWVbY29zdDc1LkIuZHJpZnQub3V0Y29tZXMkZS52YXIgJWluJSBibHVlMmdyZWVuKDEwKVs2OjEwXV0gPC0gVFJVRQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHNqUGxvdCkKY29zdDc1Lm1vZGVsIDwtIGdsbShncmVlbi5vdXRjb21lfkIsIGRhdGE9Y29zdDc1LkIuZHJpZnQub3V0Y29tZXMsIGZhbWlseT0iYmlub21pYWwiKQpzdW1tYXJ5KGNvc3Q3NS5tb2RlbCkKcGxvdF9tb2RlbChjb3N0NzUubW9kZWwsIHNob3cudmFsdWVzID0gVFJVRSwgdmFsdWUub2Zmc2V0PS4zLCB0aXRsZT0iT2RkcyByYXRpb3MgZm9yIGdyZWVuIG91dGNvbWUiKQpgYGAKYGBge3J9CmNvc3QxMDAuQi5kcmlmdC5vdXRjb21lcyA8LSByYmluZChkcmlmdDUwMDBbWzJdXSwgczEubmV3LkIwLmNvc3QxMDBbWzJdXSwgczEubmV3LkIuMS5jb3N0MTAwW1syXV0sIHMxLm5ldy5CLjIuY29zdDEwMFtbMl1dLCBzMS5uZXcuQi4zLmNvc3QxMDBbWzJdXSwgczEubmV3LkIuNC5jb3N0MTAwW1syXV0sIHMxLm5ldy5CLjUuY29zdDEwMFtbMl1dLCBzMS5uZXcuQi42LmNvc3QxMDBbWzJdXSwgczEubmV3LkIuNy5jb3N0MTAwW1syXV0sIHMxLm5ldy5CLjguY29zdDEwMFtbMl1dLCBzMS5uZXcuQi45LmNvc3QxMDBbWzJdXSwgczEubmV3LkIxLmNvc3QxMDBbWzJdXSkKYGBgCgpgYGB7cn0KY29zdDEwMC5CLmRyaWZ0Lm91dGNvbWVzJEIgPC0gTkEKY29zdDEwMC5CLmRyaWZ0Lm91dGNvbWVzJEJbMTo1MDAwXSA8LSAiZHJpZnQiCmNvc3QxMDAuQi5kcmlmdC5vdXRjb21lcyRCWzUwMDE6MTA1MDBdIDwtIHJlcChzZXEoMCwxLDAuMSksIGVhY2g9NTAwKQpjb3N0MTAwLkIuZHJpZnQub3V0Y29tZXMkQiA8LSBmYWN0b3IoY29zdDEwMC5CLmRyaWZ0Lm91dGNvbWVzJEIsIGxldmVscz1jKCJkcmlmdCIsIjAiLCIwLjEiLCIwLjIiLCIwLjMiLCIwLjQiLCIwLjUiLCIwLjYiLCIwLjciLCIwLjgiLCIwLjkiLCIxIikpCmBgYAoKYGBge3J9CmxpYnJhcnkoY29sb3JSYW1wcykKY29zdDEwMC5CLmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWUgPC0gTkEKY29zdDEwMC5CLmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWVbY29zdDEwMC5CLmRyaWZ0Lm91dGNvbWVzJGUudmFyICVpbiUgYmx1ZTJncmVlbigxMClbMTo1XV0gPC0gRkFMU0UKY29zdDEwMC5CLmRyaWZ0Lm91dGNvbWVzJGdyZWVuLm91dGNvbWVbY29zdDEwMC5CLmRyaWZ0Lm91dGNvbWVzJGUudmFyICVpbiUgYmx1ZTJncmVlbigxMClbNjoxMF1dIDwtIFRSVUUKYGBgCgpgYGB7cn0KbGlicmFyeShzalBsb3QpCmNvc3QxMDAubW9kZWwgPC0gZ2xtKGdyZWVuLm91dGNvbWV+QiwgZGF0YT1jb3N0MTAwLkIuZHJpZnQub3V0Y29tZXMsIGZhbWlseT0iYmlub21pYWwiKQpzdW1tYXJ5KGNvc3QxMDAubW9kZWwpCnBsb3RfbW9kZWwoY29zdDEwMC5tb2RlbCwgc2hvdy52YWx1ZXMgPSBUUlVFLCB2YWx1ZS5vZmZzZXQ9LjMsIHRpdGxlPSJPZGRzIHJhdGlvcyBmb3IgZ3JlZW4gb3V0Y29tZSIpCmBgYApgYGB7cn0KI21vZGVsIDEgY29zdCBtb2RlbCBvdXRwdXRzCgpCLm1vZGVsMS5jb3N0MC5vdXRwdXRzIDwtIGRhdGEuZnJhbWUobW9kZWwgPSByZXAoTkEsIDExKSwgY29zdCA9IHJlcCgwLDExKSwgQiA9IHNlcSgwLDEsMC4xKSwgT1IgPSBleHAoY29zdDAubW9kZWwkY29lZmZpY2llbnRzKVstMV0sIGxvdyA9IGV4cChjb25maW50KGNvc3QwLm1vZGVsKSlbLTEsMV0sIGhpZ2ggPSBleHAoY29uZmludChjb3N0MC5tb2RlbCkpWy0xLDJdKQoKQi5tb2RlbDEuY29zdDEwLm91dHB1dHMgPC0gZGF0YS5mcmFtZShtb2RlbCA9IHJlcChOQSwgMTEpLCBjb3N0ID0gcmVwKDEwLDExKSwgQiA9IHNlcSgwLDEsMC4xKSwgT1IgPSBleHAoY29zdDEwLm1vZGVsJGNvZWZmaWNpZW50cylbLTFdLCBsb3cgPSBleHAoY29uZmludChjb3N0MTAubW9kZWwpKVstMSwxXSwgaGlnaCA9IGV4cChjb25maW50KGNvc3QxMC5tb2RlbCkpWy0xLDJdKQoKQi5tb2RlbDEuY29zdDI1Lm91dHB1dHMgPC0gZGF0YS5mcmFtZShtb2RlbCA9IHJlcChOQSwgMTEpLCBjb3N0ID0gcmVwKDI1LDExKSwgQiA9IHNlcSgwLDEsMC4xKSwgT1IgPSBleHAoY29zdDI1Lm1vZGVsJGNvZWZmaWNpZW50cylbLTFdLCBsb3cgPSBleHAoY29uZmludChjb3N0MjUubW9kZWwpKVstMSwxXSwgaGlnaCA9IGV4cChjb25maW50KGNvc3QyNS5tb2RlbCkpWy0xLDJdKQoKQi5tb2RlbDEuY29zdDUwLm91dHB1dHMgPC0gZGF0YS5mcmFtZShtb2RlbCA9IHJlcChOQSwgMTEpLCBjb3N0ID0gcmVwKDUwLDExKSwgQiA9IHNlcSgwLDEsMC4xKSwgT1IgPSBleHAoY29zdDUwLm1vZGVsJGNvZWZmaWNpZW50cylbLTFdLCBsb3cgPSBleHAoY29uZmludChjb3N0NTAubW9kZWwpKVstMSwxXSwgaGlnaCA9IGV4cChjb25maW50KGNvc3Q1MC5tb2RlbCkpWy0xLDJdKQoKQi5tb2RlbDEuY29zdDc1Lm91dHB1dHMgPC0gZGF0YS5mcmFtZShtb2RlbCA9IHJlcChOQSwgMTEpLCBjb3N0ID0gcmVwKDc1LDExKSwgQiA9IHNlcSgwLDEsMC4xKSwgT1IgPSBleHAoY29zdDc1Lm1vZGVsJGNvZWZmaWNpZW50cylbLTFdLCBsb3cgPSBleHAoY29uZmludChjb3N0NzUubW9kZWwpKVstMSwxXSwgaGlnaCA9IGV4cChjb25maW50KGNvc3Q3NS5tb2RlbCkpWy0xLDJdKQoKQi5tb2RlbDEuY29zdDEwMC5vdXRwdXRzIDwtIGRhdGEuZnJhbWUobW9kZWwgPSByZXAoTkEsIDExKSwgY29zdCA9IHJlcCgxMDAsMTEpLCBCID0gc2VxKDAsMSwwLjEpLCBPUiA9IGV4cChjb3N0MTAwLm1vZGVsJGNvZWZmaWNpZW50cylbLTFdLCBsb3cgPSBleHAoY29uZmludChjb3N0MTAwLm1vZGVsKSlbLTEsMV0sIGhpZ2ggPSBleHAoY29uZmludChjb3N0MTAwLm1vZGVsKSlbLTEsMl0pCgpjb3N0Lm1vZGVsMS5vdXRwdXRzIDwtIHJiaW5kKEIubW9kZWwxLmNvc3QwLm91dHB1dHMsIEIubW9kZWwxLmNvc3QxMC5vdXRwdXRzLCBCLm1vZGVsMS5jb3N0MjUub3V0cHV0cywgQi5tb2RlbDEuY29zdDUwLm91dHB1dHMsIEIubW9kZWwxLmNvc3Q3NS5vdXRwdXRzLCBCLm1vZGVsMS5jb3N0MTAwLm91dHB1dHMpCgpjb3N0Lm1vZGVsMS5vdXRwdXRzJG1vZGVsWzE6MTFdIDwtICJjb3N0ID0gMCIKY29zdC5tb2RlbDEub3V0cHV0cyRtb2RlbFsxMjoyMl0gPC0gImNvc3QgPSAxMCIKY29zdC5tb2RlbDEub3V0cHV0cyRtb2RlbFsyMzozM10gPC0gImNvc3QgPSAyNSIKY29zdC5tb2RlbDEub3V0cHV0cyRtb2RlbFszNDo0NF0gPC0gImNvc3QgPSA1MCIKY29zdC5tb2RlbDEub3V0cHV0cyRtb2RlbFs0NTo1NV0gPC0gImNvc3QgPSA3NSIKY29zdC5tb2RlbDEub3V0cHV0cyRtb2RlbFs1Njo2Nl0gPC0gImNvc3QgPSAxMDAiCgoKY29zdC5tb2RlbDEub3V0cHV0cyRtb2RlbCA8LSBmYWN0b3IoY29zdC5tb2RlbDEub3V0cHV0cyRtb2RlbCwgbGV2ZWxzPWMoImNvc3QgPSAwIiwiY29zdCA9IDEwIiwiY29zdCA9IDI1IiwiY29zdCA9IDUwIiwgImNvc3QgPSA3NSIsImNvc3QgPSAxMDAiKSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBjb3N0Lm1vZGVsMS5vdXRwdXRzLCBhZXMoeCA9IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKEIpKSwgeSA9IE9SLCBjb2xvciA9IG1vZGVsKSkrCmdlb21fbGluZSgpKwpnZW9tX3BvaW50KHNpemUgPSAxKSsKZ2VvbV9yaWJib24oYWVzKHkgPSBPUiwgeW1pbiA9IGxvdywgeW1heCA9IGhpZ2gsIGZpbGw9bW9kZWwpLCBhbHBoYSA9IDAuMikrCnNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YyhibHVlMmdyZWVuKDYpKSkrCmdlb21faGxpbmUoeWludGVyY2VwdD0xLCBsaW5ldHlwZT0iZGFzaGVkIiwgY29sb3IgPSAicmVkIikrCnlsaW0oMCwgNCkrCnlsYWIoIk9kZHMgcmF0aW9zIGZvciBhIGdyZWVuIG91dGNvbWUiKSsKeGxhYigiVmFsdWUgb2YgQiIpKwpzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEsIC4xKSkrCnRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCkpCmBgYA==